首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >*ptr[10]和(*ptr)之间的差异[10]

*ptr[10]和(*ptr)之间的差异[10]
EN

Stack Overflow用户
提问于 2012-12-17 16:38:45
回答 6查看 66.7K关注 0票数 17

以获取以下代码:

代码语言:javascript
复制
    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]的元素)。

但是下面的代码片段如何呢:

代码语言:javascript
复制
int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr=a;
printf("%d",*ptr[1]);

它给出了分段错误。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-12-17 16:39:56

int *ptr[10];

这是一个由10个int*指针组成的数组,而不是您想象的那样指向一个由10个int组成的数组的指针

int (*ptr)[10];

这是指向10 int数组的指针

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

票数 18
EN

Stack Overflow用户

发布于 2012-12-17 16:45:57

代码语言:javascript
复制
int (*ptr)[10];

是一个指向10个整型数组的指针。

代码语言:javascript
复制
int *ptr[10];

是由10个指针组成的数组。

段故障的原因:

*ptr=a;printf("%d",*ptr1);

这里,您将数组a的地址分配给ptr,该地址将指向元素a[0]。这相当于:*ptr=&a[0];

但是,当您打印时,您访问的是ptr[1],这是一个未初始化的指针,它是未定义的行为,因此会产生segfault。

票数 10
EN

Stack Overflow用户

发布于 2012-12-17 16:40:14

int(*)[10]是一个指向包含10个成员的整数数组的指针。也就是说,它指向int a[10]

其中as int *[10]是整数指针数组

代码语言:javascript
复制
#include <stdio.h>
int main()
{

int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};

printf("\n%p  %p", ptr[0], a);

*ptr=a; //ptr[0] is assigned with address of array a.

printf("\n%p  %p", ptr[0], a); //gives you same address

printf("\n%d",*ptr[0]); //Prints zero. If *ptr[1] is given then *(ptr + 1) i.e ptr[1] is considered which is uninitialized one.

return 0;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13910749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档