运算符 &
作用:获取变量的地址,它的操作数必需是变量。
输出变量的地址:
int i = 0;
printf("%x",&i);//输出变量的地址
也可以
int i = 0;
int p;
p = (int)(&i);//强制转换
printf("%x",p);
地址的大小是否和int相同取决于编译器
int i;
printf("%d",&i);
x86 32位架构的 p(int类型) 和 &i是四个字节;
x64 64位架构的 p(int类型) 和 &i分别是8个字节 4个字节;
所以X86的地址大小和int是相同的数值
如何确定字节数呢?
利用sizeof(int) 和 sizeof(&i)这两个的结果来计算。
对于&取地址符号来看有没有取地址对象的规则呢?
答案是当然有的
对于这样的情况
int i = 0;
int p;
p = (int)(&i);
p = (int)(&i+p);//错误
p = (int)(&++i);//错误
p = (int)(&i++);//错误
为啥这些都是错误的呢?是因为&的操作对象必需是明确的变量
在编译原理里面有说到过相邻两个变量的地址情况
如在
int i = 0;
int p;
printf("%p\n",&i);
printf("%p",&p);
输出的结果是:006DFEFC
006DFEF8
我们观察一下 发现两个式子相减就是相当于C - 8 = 4;
在32位架构下sizeof(int) = 4;
两个地址是精密相连的。
指针的取地址 C
最新推荐文章于 2024-04-21 18:11:35 发布