Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用指针添加数字_C_Pointers - Fatal编程技术网

C 使用指针添加数字

C 使用指针添加数字,c,pointers,C,Pointers,当我想运行下面的代码时,我得到了以下错误 Enter number1 4 Segmentation fault (core dumped) #包括 #包括 int main() { int*p1;int*p2; int n; printf(“输入数字1\n”); scanf(“%d”,p1); printf(“输入数字2\n”); scanf(“%d”,p2); printf(“总和:%d\n”,(*p1+*p2)); 返回0; } 您的scanf调用会导致未定义的行为-您正在传递未初始化的

当我想运行下面的代码时,我得到了以下错误

Enter number1
4
Segmentation fault (core dumped)

#包括
#包括
int main()
{
int*p1;int*p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”,p1);
printf(“输入数字2\n”);
scanf(“%d”,p2);
printf(“总和:%d\n”,(*p1+*p2));
返回0;
}

您的
scanf
调用会导致未定义的行为-您正在传递未初始化的指针。你的意思可能是:

int p1, p2;

...

scanf("%d", &p1);

...

scanf("%d", &p2);

printf("sum:%d\n", p1 + p2);

您的
scanf
调用会导致未定义的行为-您正在传递未初始化的指针。你的意思可能是:

int p1, p2;

...

scanf("%d", &p1);

...

scanf("%d", &p2);

printf("sum:%d\n", p1 + p2);

您的指针未初始化。在使用之前为它们分配内存,否则这是未定义的行为

p1 = malloc(sizeof(int));
p2 = malloc(sizeof(int));
更好的是,只需使用
int
而不是
int*

int p1, p2;
int n;
printf("Enter number1\n");  
scanf("%d",&p1);
printf("Enter number2\n");
scanf("%d",&p2);

您的指针未初始化。在使用之前为它们分配内存,否则这是未定义的行为

p1 = malloc(sizeof(int));
p2 = malloc(sizeof(int));
更好的是,只需使用
int
而不是
int*

int p1, p2;
int n;
printf("Enter number1\n");  
scanf("%d",&p1);
printf("Enter number2\n");
scanf("%d",&p2);

这些指针未初始化:

int *p1;int *p2;
…因此,它们没有分配任何内存,也无法知道它们指向何处

scanf
希望能够写入这些位置。您应该改为使用
intp1;int p2
并将这些文件的地址传递给
scanf

scanf("%d", &p1);

这些指针未初始化:

int *p1;int *p2;
…因此,它们没有分配任何内存,也无法知道它们指向何处

scanf
希望能够写入这些位置。您应该改为使用
intp1;int p2
并将这些文件的地址传递给
scanf

scanf("%d", &p1);

只需使用常规int,而不是指针(此处不需要)

#包括
int main()
{
int p1;int p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”和&p1);
printf(“输入数字2\n”);
scanf(“%d”和&p2);
printf(“总和:%d\n”,(p1+p2));
返回0;
}

只需使用常规int,而不是指针(此处不需要)

#包括
int main()
{
int p1;int p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”和&p1);
printf(“输入数字2\n”);
scanf(“%d”和&p2);
printf(“总和:%d\n”,(p1+p2));
返回0;
}

代码中的更改包括将声明更改为int,而不是*int,并使用
&
传递指向这些变量的指针:

#include<stdio.h>
#include<stdlib.h>

int main()
{
int p1;int p2;
int n;
printf("Enter number1\n");  
scanf("%d",&p1);
printf("Enter number2\n");
scanf("%d",&p2);
printf("sum:%d\n", (p1 + p2));
return 0;
} 
#包括
#包括
int main()
{
int p1;int p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”和&p1);
printf(“输入数字2\n”);
scanf(“%d”和&p2);
printf(“总和:%d\n”,(p1+p2));
返回0;
} 

代码中的更改包括将声明更改为int,而不是*int,并使用
&
传递指向这些变量的指针:

#include<stdio.h>
#include<stdlib.h>

int main()
{
int p1;int p2;
int n;
printf("Enter number1\n");  
scanf("%d",&p1);
printf("Enter number2\n");
scanf("%d",&p2);
printf("sum:%d\n", (p1 + p2));
return 0;
} 
#包括
#包括
int main()
{
int p1;int p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”和&p1);
printf(“输入数字2\n”);
scanf(“%d”和&p2);
printf(“总和:%d\n”,(p1+p2));
返回0;
} 

Int*p1是指向整数的指针。您从不初始化它,因此它会指向内存中的“随机”位置。当您尝试将f()扫描到p2时,您正在写入p1恰好指向的任何位置。由于p1指向一个无效的位置,因此您会得到未定义的行为。在这种情况下,会出现seg故障,因为p1点的位置超出了分配的空间

您可以通过为p1分配内存来解决此问题。有点像格里克

int *p1 = malloc(sizeof(int));
或者您可以使p1只是一个int而不是指向int的指针,并在czll扫描时将指针传递给p1

int p1;
...
scanf(...,&p1);

Int*p1是指向整数的指针。您从不初始化它,因此它会指向内存中的“随机”位置。当您尝试将f()扫描到p2时,您正在写入p1恰好指向的任何位置。由于p1指向一个无效的位置,因此您会得到未定义的行为。在这种情况下,会出现seg故障,因为p1点的位置超出了分配的空间

您可以通过为p1分配内存来解决此问题。有点像格里克

int *p1 = malloc(sizeof(int));
或者您可以使p1只是一个int而不是指向int的指针,并在czll扫描时将指针传递给p1

int p1;
...
scanf(...,&p1);

对于您想要使用指针的任何东西(因此使用动态分配的内存)。分配内存并初始化指针:

#include<stdio.h>
#include<stdlib.h>

int main()
{
int *p1;int *p2;
int n;

p1=malloc(sizeof(int)); 
p2=malloc(sizeof(int));

printf("Enter number1\n");  
scanf("%d",p1);
printf("Enter number2\n");
scanf("%d",p2);
printf("sum:%d\n", (*p1 + *p2));
return 0;
}
#包括
#包括
int main()
{
int*p1;int*p2;
int n;
p1=malloc(sizeof(int));
p2=malloc(sizeof(int));
printf(“输入数字1\n”);
scanf(“%d”,p1);
printf(“输入数字2\n”);
scanf(“%d”,p2);
printf(“总和:%d\n”,(*p1+*p2));
返回0;
}

用于任何您想要使用指针(从而使用动态分配的内存)的对象。分配内存并初始化指针:

#include<stdio.h>
#include<stdlib.h>

int main()
{
int *p1;int *p2;
int n;

p1=malloc(sizeof(int)); 
p2=malloc(sizeof(int));

printf("Enter number1\n");  
scanf("%d",p1);
printf("Enter number2\n");
scanf("%d",p2);
printf("sum:%d\n", (*p1 + *p2));
return 0;
}
#包括
#包括
int main()
{
int*p1;int*p2;
int n;
p1=malloc(sizeof(int));
p2=malloc(sizeof(int));
printf(“输入数字1\n”);
scanf(“%d”,p1);
printf(“输入数字2\n”);
scanf(“%d”,p2);
printf(“总和:%d\n”,(*p1+*p2));
返回0;
}

您没有为指针分配内存。为什么不直接使用
int
p1
p2
是统一的指针。未定义的行为。@user2923786我刚刚发布了您需要的更正。除非您必须使用指针,否则我建议使用堆栈分配的整数作为其他答案。您没有为指针分配内存。为什么不直接使用
int
p1
p2
是统一的指针。未定义的行为。@user2923786我刚刚发布了您需要的更正。除非您必须使用指针,否则我建议使用堆栈分配的整数作为其他答案。谢谢您…我想使用指针添加数字…使用malloc后,代码工作正常..再次感谢..@user2923786不客气。如果有效,请接受答案:)谢谢…我想使用指针添加数字…使用malloc后,代码工作正常..再次感谢..@user2923786不客气。如果答案有效,请接受:)