相关疑难解决方法(0)

分配给指针时从不兼容的指针类型警告初始化

当我使用这段代码时,GCC给我一个'来自不兼容指针类型的初始化'警告(虽然代码工作正常并且做了它应该做的事情,它打印了数组的所有元素).

#include <stdio.h>

int main(void)
{
    int arr[5] = {3, 0, 3, 4, 1};
    int *p = &arr;

    printf("%p\n%p\n\n", p);

    for (int a = 0; a < 5; a++)
        printf("%d ", *(p++));
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用这段代码时没有给出警告

int main(void)
{
    int arr[5] = {3, 0, 3, 4, 1};
    int *q = arr;

    printf("%p\n%p\n\n", q);

    for (int a = 0; a < 5; a++)
        printf("%d ", *(q++));
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

这两个片段之间的唯一区别是我指定*p =&arr和*q = arr.

  • 究竟有什么不同和制作?
  • 为什么代码在两种情况下都会执行并提供完全相同的输出?

c arrays pointers

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

arrays ×1

c ×1

pointers ×1