因此,虽然取得的数组地址相同,但是它们的步长不同,导致了指向的位置不同。 解析: 1.a 和 &a[0]取地址的类型是一样的,a + 1 和 &a[0] + 1 ,都是指向数组中第2个元素的地址,第1个元素的地址是0061FF08,int型数组相相邻元素地址之间相差4个字节,因此第2个元素的地址就是0061FF0C,这里的步长是4。
在C语言中,数组名代表数组的首元素地址,因此对数组名取地址实际上是获取该数组的首地址。然而,由于C语言中数组名可以隐式地转换为指针,因此对数组名取地址并不会得到数组的地址,而是得到指向该数组的指针。 具体来说,对于一个数组a,其名称a代表了数组的首元素的地址,即&a[0]。当对a取地址时,即&a,实际上得...
a表示&a[0],也即对数组首元素取地址,a+1表示首地址+sizeof(元素类型)。 &a虽然值为数组首元素地址,但类型为:类型 (*)[数组元素个数],所以&a+1大小为:首地址+sizeof(a)。 还有这篇文章最初提到的指针的指针的那个错误结论,其实即使不懂上述内容,也应该判断出结论是错误的,大家应该在了解数组名即是数组...
答案是一样,这个是为什么呢? 其实指向整个a数组的指针当然也是指向整个数组的起始地址也是a[0]。所以a和&a的内存地址指针也是一样的。虽然他们的内存指针地址是相同的。但是对这两个指针进行加减表示的含义是不同的。
比你在那瞎琢磨有用的多!数组就是指针为什么是错的?449 赞同 · 38 评论回答
a表示&a[0],也即对数组首元素取地址,a+1表示首地址+sizeof(元素类型)。 &a虽然值为数组首元素地址,但类型为:类型 (*)[数组元素个数],所以&a+1大小为:首地址+sizeof(a)。 还有这篇文章最初提到的指针的指针的那个错误结论,其实即使不懂上述内容,也应该判断出结论是错误的,大家应该在了解数组名即是数组...
偶然在晚上学了C语言指针后网页闲逛找题时,被一个数组名取地址搞糊涂了,在自己试验加探索后我稍微悟了一点东西。 代码如下: #include<stdio.h> #include<stdlib.h> int main(void) { int a[5] = { 1,2,3,4,5}; int* ptr = (int *)(&a + 1); ...
个元素地址 ,*(array + i)是二维数组第 i 个元素的值 , 该值是 一维数组 ,*(array + i)一维数组名是数组首元素地址 ,*array + j步长是一维数组元素大小 , 指向第 j 个元素地址 ; &a[i][j]:a[i][j]是第 i 行, 第 j 列 元素变量 , 取地址 , 就是取该变量的地址 , 也就是 第 ...
剧透:数组名不是指针变量,仅在特定的用法上等同于指针;数组名是地址常量,因此无法更改自身所表示的地址(但并非指针常量);对数组名取址在C语言标准中属于未定义行为,具体取决于编译器的实现,通常对数组名取址的表现与数组指针等同(仔细想想如何给一个数组指针赋值)。
- **数组名 `arr1`**:是一个常量指针,指向数组的首地址。- **数组名取地址 `&arr1`**:表示...