当前位置:网站首页>指针/【类型】对指针加一能力的影响(&*ip ,*&ipd)
指针/【类型】对指针加一能力的影响(&*ip ,*&ipd)
2022-08-02 14:13:00 【白U】
数据区和栈区的区别?
一个存储单元就是 1 字节,一个字节就是8个二进制位
a*b : 表示乘法
int * a :定义一个指针变量
*a = 100 ; 获取指针指向的数据 (解引用)
通用寄存器
没有类型:数据就没有意义。
- 类型决定了指针加一的能力
- 类型决定了指针对内存的解释能力。
- 指针:
- 在32位平台 占4个字节,64平台占8个字节
- 指针就是内存的地址
- 指针变量就是保存内存地址的变量
操纵指针必须明确,
一个存储单元就是 1 字节,一个字节就是8个二进制位
如果是32位系统,指针为四字节,存储时,存储的是16进制数(小端存放,高位数在高地址,低位数在低地址)
1, 指针自身的值,
2, 以及指针所指之物的值
操作指针,要明确指针自身的值,如ip本身的值就是b的地址。
int main()
{
int a = 10, b = 20;
int* ip = NULL;
ip = &a;
*ip = 100;
ip = &b; //操作指针,要明确指针自身的值,如ip本身的值就是b的地址。
*ip = 200; // *ip就是b本身
*ip = *&a 是等价的
面试:
- 从代码层面:ip存放的是变量的地址,那么*ip解引用就是变量本身
- 从机器指令角度:首先把ip的的值(变量的地址)取出来(放到ecx)中,接下来对它的地址进行操作,将所要赋予的值放入到指定的内存地址空间中
&*ip
*&ipd
实参传值的时候,是从右向左
- 传地址
Swap_a(&x,&y);
**```
将y的地址传给*bp,接下来x的地址传给*ap。**
```c
void Swap_a(int *ap,int *bp)
指针:仅存放变量的首地址。不论是double,int,char
在32位系统中,永远是占四字节
指针+1 和类型相关:
x86系统: int *p = ar[5];
p+1; +4字节
double: +8
char +1
int main()
{
int ar[5] = {
12,23,34,45,56 };
int* p = ar;
int x = 0;
int y = 0;
x = *p++;
y = *p;
printf("%d,%d\n", x, y);
x = ++ * p;
y = *p;
printf("%d,%d\n", x, y);
x = *++p;
y = *p;
printf("%d,%d\n", x, y);
}
int main()
{
int a = 0x12345678; //共四个字节
int* ip = &a;
char* p =(char*) &a;//只能一个字节一个字节
char* cp = (char*)&a;
*p = 'a'; // 97 0x61 存放在低地址
*p = 'b'; //98 0x62
p = p + 1;
*p = 'c'; //99 0x63
p = p + 1;
//打印 63 62 61
return 0;
}
边栏推荐
猜你喜欢
随机推荐
饥荒联机版Mod开发——配置代码环境(二)
分布式一致性协议-Gossip
SkyWalking Agent数据采集和上报原理浅析
深入理解负载均衡
udp transparent proxy
极简式 Unity 获取 bilibili 直播弹幕、SC、上舰、礼物等 插件
光导布局设计工具
MySQL协议长什么样子
MMD->Unity一站式解决方案
远程连接Ubuntu中的Mysql
[System Design and Implementation] Flink-based distracted driving prediction and data analysis system
mininet hosts talk to real internet
shader入门精要3
TypeScript
我的2021回忆录
开源一个golang写的游戏服务器框架
二叉树的遍历:递归法/ 迭代法/ 统一迭代法(强QAQ)
Based on the least squares linear regression equation coefficient estimation
戴森球计划这个游戏牛逼
Codeforces Round #624 (Div. 3)