第三行输出中,首先得到了指向整个数组的指针,对其进行加一操作,指针就指向了整个数组后面的地址,也就是5后面的地址,那么此时将其转化为int*类型再输出,就得到了该未初始化过的值。 第四行输出中,过程为,指针指向5后面的地址,转为int*类型,此时的减一操作使指针移动一个int类型大小的地址空间,那么便指向了5。
总的来说,对于C语言中的数组,数组名代表了数组的首元素的地址,对数组名取地址实际上是获取该数组的指针,而不是数组的地址。这一特性在C语言的数组操作中非常常见,并且为指针操作提供了方便。 延伸阅读 c语言数组里可以放变量名么 在C语言中,数组元素可以是任意数据类型,包括基本数据类型、结构体、枚举等。而数组...
这里设置了一个长度为5的数组,之后定义一个int类型的指针将对a的首地址求地址后加1然后再次强制转换成int类型的指针传递给ptr,我第一反应是a不就是代表指向首个元素的地址吗,为什么还要对它求地址,另外求完地址之后+1操作再次把一个指向地址转换成指针类型给了ptr,这让我十分费解,我们先来看输出结果 输出案例1:...
下面关于C语言指针的说法中,正确的是:A.指针、数组名、函数名都是代表内存地址的值B.语句“int *p;” 中的*是对指针p做间接取址运算C.语言中,引用数组元素既可以
偶然在晚上学了C语言指针后网页闲逛找题时,被一个数组名取地址搞糊涂了,在自己试验加探索后我稍微悟了一点东西。 代码如下: #include<stdio.h> #include<stdlib.h> int main(void) { int a[5] = { 1,2,3,4,5}; int* ptr = (int *)(&a + 1); ...
在C/C++中,数组名相当于一个指针,指向数组的首地址。这里“相当于”不代表等于,数组名和指针还是有很多区别的,这个在《C陷阱与缺陷》里有详尽的讲述。而这里要说的是对于数组名取地址的这么一个操作。 如果声明有如下数组: intarr[5]; 那么,&arr这个操作得到了什么值呢?
在C/C++中,数组名相当于一个指针,指向数组的首地址。这里“相当于”不代表等于,数组名和指针还是有很多区别的,这个在《C陷阱与缺陷》里有详尽的讲述。而这里要说的是对于数组名取地址的这么一个操作。 如果声明有如下数组: intarr[5]; 那么,&arr这个操作得到了什么值呢?