如何解决将c指针传递给函数
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和两个21s。简单地打印a将是数组a []的第一个元素。 a [0]就像写* a。我没有得到的是为什么a [1]中会有680548828。 a [1]是数组中存储指向21的指针的元素之后的元素(a [0])吗?抱歉给您带来的困惑,请帮忙。谢谢。
解决方法
在您的代码中
printf("%d",b);
在您尝试调用undefined behaviour时尝试使用%d
打印指针。正确的方法是使用
-
%p
格式说明符 - 将参数传递给
void *
相同的逻辑也适用于被调用的函数,请记住,在大多数情况下(包括此特定用法),数组名称会衰减为指向第一个元素的指针,基本上产生指针类型。
也就是说,您正在尝试访问被调用函数中的无效内存。您传递了一个指向int
的指针,然后在被调用的函数中,您尝试通过说a[1]
,a[2]
等来访问存储区域之外的存储器。您无法做到这一点。再次调用未定义的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。