(1)可以发现array和&array的值是一样的,都是0012FF34。对array+1,结果不是简单的加法那样,即并不是0012FF35,而是0012FF38;由于array[0]和array一样,都是数组首元素的首地址,+1后的结果相同。然而,&array+1的结果却是0012FF48。另外,分别对array和&array求字节长度发现是一样的(结果20是一个十进制数)。
int a[5]={1,2,3,4,5}; &a=&a[0]=a; *a=a[0]; (a+1)=&a[1]; 同样 *(a+1)=a[1]; (&a+1)=a+sizeof(a)+-4;// (&a+1 )等于数组结束地址的下一个存储单元 (int *) (&a+1)-1=&(a[4]); (&a+1)-1=&a=a=&a[0]; (int *) (&a+1-1)=&a=a=&a[0];...
把数组a改成char类型 (忽略那个没有刷新的缺少;分号)对于int的初始化使用char,会产生警告,所以这里强制转化我们是可以理解了。 探究对于数组名取地址 在网上翻阅其他博客后查阅得知,因为数组名是一个右值,而求址运算符&是需要有具体的内存空间,也就是变量 //另外我们需要明确数组名和指针有一个区别是:数组名是符...
数组名的地址,和数组名取地址的讨论 这个问题的发现是在以下的代码中发现的: #include<stdio.h>intmain(){intarr[2]={1,2};printf("%p",arr);printf("%p",&arr);return0;} 1. 2. 3. 4. 5. 6. 7. 8. 在运行之后我们发现的数组名本身的地址和数组名内部存储的地址是完全一样的,我们把数组名...
偶然在晚上学了C语言指针后网页闲逛找题时,被一个数组名取地址搞糊涂了,在自己试验加探索后我稍微悟了一点东西。 代码如下: #include<stdio.h> #include<stdlib.h> intmain(void) { inta[5] = {1,2,3,4,5}; int* ptr = (int*)(&a +1); ...