#include <stdio.h>
const int MAX = 3;
int main ()
{
int var[] = {10, 100, 200};
int i, *ptr;
/* 指针中的数组地址 */
ptr = var;
for ( i = 0; i < MAX; i++)
{
printf("存储地址:var[%d] = %x\n", i, ptr );
printf("存储值:var[%d] = %d\n", i, *ptr );
/* 移动到下一个位置 */
ptr++;
}
return 0;
}
声明指针变量时为什么(int i,ptr;)int i后面紧跟ptr,写成ptr不应该是解引用吗。不是应该是int ptr吗,int* 表示指针变量类型,ptr为指针变量名。
ptr=var,为什么会是这样呢,不应该是ptr=&var吗,指针变量ptr指向取地址var的地址吗。难道是因为数组名var表示整个数组地址,所以与&var相等?
int a,b,*c; 可以理解为 int a,int b,int *c
数组名本身是个指针。因此可以ptr=var
int i, *ptr; 这里注意两个变量之间是逗号间隔,c语言里专门有个逗号运算符,你可以去百度下逗号运算符的相关内容,这句等价于:int i; int *prt; 。var[] 被定义为数组,数组名var就表示这个数组的首地址,也就是数组名var就是数组的地址,ptr = var; 就是让指针ptr 指向数组的首地址var。
【以下回答由 GPT 生成】
在声明指针变量时,为什么使用int *ptr
而不是int ptr
? - 在C语言中,指针变量用于存储另一个变量的内存地址。为了声明一个指针变量,需要使用*
来指示该变量是一个指针,并以*
指示该指针指向的是一个特定类型的数据。所以,int *ptr
表示ptr
是一个指向整数类型的指针变量。
为什么ptr
不是解引用的形式,它不应该是int *ptr
吗? - 在声明指针变量时,int *ptr
中的*
表示该变量是一个指针,而非解引用操作符。解引用操作符*
用于访问指针所指向的内存中存储的值。在声明中使用*
是为了告诉编译器将ptr
当作一个指针变量处理。
为什么在ptr = var
中没有使用取地址符号&
? - 在C语言中,数组名会自动转换为指向数组首元素的指针,所以在ptr = var
中,var
表示的是一个指向数组首元素的指针,不需要再使用取地址符号&
。这样的赋值语句将使ptr
指向数组的第一个元素。
综上所述,对于给定的代码片段,int *ptr
用于声明ptr
为指针变量,不表示解引用操作;ptr = var
将使ptr
指向数组var
的第一个元素。
【相关推荐】