c - *ptr[10] 和 (*ptr)[10] 的区别

标签 c pointers

对于下面的代码:

    int (*ptr)[10];
    int a[10]={99,1,2,3,4,5,6,7,8,9};
    ptr=&a;
    printf("%d",(*ptr)[1]);

它应该打印什么?我在这里期待垃圾值,但输出是 1
(为此我得出结论,以这种方式初始化指针数组,即 ptr[10] 将开始按顺序指向 a[10] 的元素)。

但是这个代码片段呢:

int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr=a;
printf("%d",*ptr[1]);

它给出了段错误。

最佳答案

int *ptr[10];

这是一个包含 10 个 int* 指针的数组,而不是像你想象的那样,是一个指向包含 10 个 int 的数组的指针

int (*ptr)[10];

这是一个指向 10 个 int 的数组的指针

我相信它与 int *ptr; 相同,因为两者都可以指向一个数组,但是给定的形式只能指向一个包含 10 个 int 的数组

关于c - *ptr[10] 和 (*ptr)[10] 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13910749/

相关文章:

c - 指针之谜/菜鸟问题

c - 在 C 宏中执行算术运算

c - Linux内核中ALIGN()和round_up()宏的区别

c - Linux Arm中的request_standard_resources()函数

python - 通过 ctypes 将 Unicode 字符串传递给 printf

c++ - 将 optional 与 reference_wrapper 结合起来有意义吗?

c - #define中using 0x1是什么意思?

c - 警报失败,连接到 AWS IoT 时错误 = 42

我可以相信 (uintptr_t)NULL 等于零吗?

c - *( char** ) 实现什么类型的转换?