c指针被传递给一个函数

c pointer being passed to a function

int func(int a[]);
int main()
{
  int c = 21;  
  int *b;
  b=&c;
  printf("%d",b);
  func(b);
   
    return 0;
}

int func(int a[]){
    printf("\n%d",(a));
    printf("\n%d",*(a));
    printf("\n%d",(a[0]));
    printf("\n%d",(a[1]));
    printf("\n%d",(a[2]));
}

这是我试图了解这些指针如何与数组一起工作的东西。 这是输出。

-680548828
-680548828
21
21
-680548828
32767

前两个680548828和后两个21我懂了。简单地打印 a 将是数组 a[] 的第一个元素。 a[0] 就像写 *a。我不明白的是为什么 a[1] 中会有 680548828。 a[1] 是数组中存储指向 21 的指针的元素(a[0])之后的元素?抱歉造成混淆,请帮忙。谢谢。

在你的代码中

printf("%d",b);
当您尝试使用 %d 打印指针时,

调用 undefined behaviour。正确的方法是使用

  • %p 格式说明符
  • 将参数转换为 void *

相同的逻辑也适用于被调用函数,请记住,在大多数情况下(包括这种特定用法),数组名称会衰减为指向第一个元素的指针,基本上会产生指针类型。

也就是说,您正在尝试访问被调用函数中的无效内存。您传递了一个指向 int 的指针,并且在被调用的函数中,您试图通过说 a[1]a[2] 等访问内存区域之外的内存。您不能那样做。它再次调用未定义的行为。