声明指针变量?指针变量指向地址?

img


#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的第一个元素。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^