每当我尝试运行此C程序时,我都会收到分段错误(核心转储)消息。
#include <stdio.h>
int main()
{
int i = 200, *p, *q, *r;
p,r = &i;
q = p;
*q = *p + 1;
printf("*p = %d\n", *p);
printf("*r = %d\n", *r);
return 0;
}
它最初没有r
,但我必须将r
s添加为i
的别名,然后添加print语句以输出取消引用的值q
和r
。
答案 0 :(得分:6)
在您的代码中
p,r = &i;
未指定p
,但未初始化p
。接下来,当您取消引用p
(和q
时,因为它已被赋值为p
)
undefined behavior,因为您正在取消引用无效内存。
您需要使用
p = r = &i;
使用正确的警告编译您的代码,并且使用您的代码,您应该看到与
类似的内容警告:逗号表达式的左侧操作数无效[-Wunused-value]
p,r = &i; ^
答案 1 :(得分:1)
使用此:
p = &i;
r = &i;
而不是
p,r = &i;
未初始化的指针很糟糕。
答案 2 :(得分:0)
//I write that as an answer because i still don't have 50 reputation
1:我不明白你希望程序能做什么。使用q和r是没用的。
2: p,r=&i;
不是一个好的命令。使用p=r=&i
或p=&i; r=&i;
或
p=&i; r=p;
答案 3 :(得分:0)
我已经在您的代码中进行了更正,并且工作正常,请仔细研究。
`#include <stdio.h>
int main()
{
int i = 200, *p, *q, *r;
p = &i;
r = &i;
q = p;
*q = *p + 1;
printf("*p = %d\n", *p);
printf("*r = %d\n", *r);
return 0;
}`