在大多数表达式中,数组名会被隐式转换为指向数组第一个元素的指针。 指针是一个变量,用于存储某个地址,可以通过赋值改变其指向的内存位置。 - 数组名在大多数上下文中会退化为指针,表示数组首元素的地址。
数组名可以像指针一样,通过下标操作符([] )访问元素: int arr[5] = {1, 2, 3, 4, 5}; printf("%d\n", arr[0]); // 输出 1 printf("%d\n", *(arr + 1)); // 输出 2
- 这里的 arr 被解释为指向数组第一个元素的指针。
数组是一个连续的内存块,而指针只是一个存储地址的变量。 int arr[3] = {1, 2, 3}; int* ptr = arr;
printf("%p\n", (void*)&arr); // 数组的地址 printf("%p\n", (void*)&ptr); // 指针变量的地址 printf("%p\n", (void*)ptr); // 指针指向的地址
- &ptr 表示指针变量本身的地址。这个就是字面的意思,指针是一个内存的地址,那这个地址本身也有地址。
|