我想用c语言用指针概念计算输入数的总和,但当我编译下面给定的程序时,总和的正确值没有出现,请帮我找出我在下面程序中的错误。
#include<stdio.h>
void main()
{
int g , *p;
int sum = 0;
int x=1;
for(int i=1; i<3; i++ )
{
scanf("%d ", &g);
}
p = &g;
while( x < 3){
sum = sum + *p;
p++;
x++;
}
printf("\n sum = %d ",sum);
}
您的 g
只是 一个 整数所以。
scanf("%d ", &g);
,你将 覆盖 的前一个值。p++;
,该指针将不再有效。你认为它将指向哪里?如果你想存储三个 不同 值在 g
,你需要把它变成一个 阵列 的整数。
要做到这一点,请对您的代码进行以下修改。
int g[3] , *p; // "g" can now store three different values
int x=0; // Later on - counting from 0 thru 2 in the "while" loop
//...
for (int i=0; i<3; i++) // NOTE: Arrays begin at "0" in C!
{
scanf("%d ", &g[i]); // Store to the element indexed by "i"
}
//...
p = g; // For arrays, don't need the & operator: this will give address of first element
你只能在 g
.
因此, p++;
此处将使 p
指向一个无效的地方。
你应该分配一个数组来存储所有的输入值。
同时注意,你应该使用标准的 int main(void)
在托管环境下,而不是 void main()
在C89中是非法的,而在C99或更高版本中则是实现定义的,除非你有一些特殊的理由来使用非标准签名。
#include<stdio.h>
int main(void)
{
int g[3] , *p;
int sum = 0;
int x=1;
for(int i=1; i<3; i++ )
{
scanf("%d ", &g[i]);
}
p = &g[1];
while( x < 3){
sum = sum + *p;
p++;
x++;
}
printf("\n sum = %d ",sum);
}