在c语言中用二级指针指向一维数组,(*变量名)的值为什么与数组名的值不一样啊
buf是数组的指针,也是数组首元素的指针。
myp是数组的指针的指针,也就是它是代表一个地址,这个地址上存放的数字是一个指针,这个指针指向buf数组首元素。
指针也是一个值,它是一个整数,指针也需要一个内存单元(通常4字节)存放,只是这个整数是表示一个地址的值。因此指针和一般变量一样,也可以取地址。
其实你的问题出在对buf的理解上。buf[10]是一个数组,buf是数组名。那么单独使用buf的时候,buf就已经退化成了指针。其实buf与&buf的值是一样的,都是数组中第一个元素的地址。
你看图片中选中的那4个,你会发现他们的地址都是一样的。
&buf其实与buf地址是一样的。至于怎么运算,得看编译器。也就是&buf本来就不等于*myp;
数组名称表达时候包含数组中全部元素,只能在名称后添加序号才能取到具体指,在后面括号中无数字时,系统会默认为起始位0,变量名当然不能和数组名一致,如果一致会导致变量变化导致数组中全部元素的变化!!!
&buf代表的不是取buf这个变量的地址,而是取数组元素的地址。虽然&buf和buf得内存地址相同,但它们的意义不相同,它是代表整个数组的,它的进阶单位是整个数组的字节长度(这里是10*1=10)
buf[10]是一个数组,buf是数组名。那么单独使用buf的时候,buf就已经退化成了指针。其实buf与&buf的值是一样的,都是数组中第一个元素的地址。