a+1和&a+1
阿新 • • 發佈:2017-09-21
16px color article .net 分布圖 detail 一個 har start
首先a是一個數組名,當看到這個a與&a時,一般我們的理解都是這個數組的首地址。沒錯,如果加上打印的話,確實兩個值是一樣的。
不過&a是整個數組的首地址,a則是數組首元素的地址,雖然值一樣,但是意義卻不相同。
在此之前有必要先看下c程序在內存中的分布圖。
示例代碼:
-
#include <stdio.h> int main(int argc, char *argv[]) { int i; int a[]={1, 2, 3, 4, 5}; int s; int *p = (int *)(&a+1
由上面的運行結果,我們可以知道a和&a的區別了。可得下圖:
因為是運行在main函數體內的變量,所以這些都是在棧中運行的,所以p指針是指向了a[4]後的那個地址,而p本身的地址是在棧中分配的。
綜上可知
&a+i = a + i*sizeof(a);
a+i = a +i*sizeof(a[0]);
參考:http://blog.csdn.net/eastmoon502136/article/details/8630790
a+1和&a+1