C语言细节操作 &a+1 (两图解决一切)
一件有趣的事情;
表达式中 如果出现 &a+1,究竟加多少,二话不说直接上图说明一切!!!!
总结!!!
当表达式 中出现 int p=&a+1的时候, +1所加的大小 是 a所占的大小;
即&a, 得到不仅仅是a的地址,还有a的类型;这个借助指针的赋值来理解;当我们创建一个指针时,是这样创建的
int a=10;
int* p=&a;
理所当然, 当我们正常定义一个 指针时,&a的类型应当也属于 int*;而当我们将&a强制转换成(char*)类型的时候,由指针的加减可得,(char*)&a+1,加的就是1个字节 (char所占的大小)
对于数组 若int p=&arr+1 所加的大小就是 整个数组arr所占的大小;
当然如果 直接 int p=arr+1 因为数组名称本就是首元素的地址,+1理所当然是数组元素的大小
最后附上代码,和数组图片,帮助大家进行更好的记忆
补充:
1. sizeof(数组名),计算整个数组的大小, sizeof内部单独放一个数组名,数组名表示整个数组。
2.&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。
int main() {
int a = 2;
int arr[10] = { 0 };
int p = 0;
printf("(int*) &a==%dn", &a);
p = &a + 1;
printf("(int*) &a+1==%dn", p);
p = (char*)&a + 1;
printf("((char*) (char*)&a+1==%dn", p);
printf("n");
printf("(int arr[10]) &arr==%dn", &arr);
p = &arr + 1;
printf("(int arr[10]) &arr+1==%dn", p);
printf("(int arr[10]) arr==%dn", arr);
p = arr + 1;
printf("(int arr[10]) arr+1==%dn", p);
p = p + 1;
printf("(int p) p+1==%d", p);
return 0;
}
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
二维码