#include <stdio.h>
int main()
{
int* n;
*n = 20; // causes the crash
printf("%d\n", *n);
return 0;
}
但出于某种原因,如果我首先设置int * n = i,那么我可以用* n = 20更改该值 有这个原因吗?
int i = 19;
int* n;
*n = i;
*n = 20;
编辑:谢谢大家帮助我从你的答案中学到了很多东西。
答案 0 :(得分:4)
int* n;
*n = i;
不,你看到的(在你的两个例子中)都是undefined behavior的结果。上面你没有初始化指针指向一个有意义的内存 - 通过应用*
运算符你取消引用指针并告诉它写一些值指向的内存,但是因为你没有让它指向有效的内存 - 你无法通过该指针进行书写。
这没关系
int x = 0;
int* n = &x; // Now your pointer points to valid memory
*n = 5; // Value of x will be 5 now
答案 1 :(得分:1)
是的,有一个原因。当你声明:
int* n;
指针n
显示 无处 。因此,当您尝试通过
*n = 20;
当您尝试访问无处显示指针的内容时程序崩溃。
另一方面,当你宣布
时int i = 19;
int* n;
n = &i;
您将指针 n
显示为某个有效地址 。所以当你之后你分配
*n = 20;
您实际访问有效内存地址的内容。
答案 2 :(得分:-1)
你不能使用该指针设置值的原因是因为它还没有指向内存地址,你需要使用malloc并给它一些指向的东西。
希望这会有所帮助:D
E.g
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int *n;
n = malloc(sizeof(int));
*n = 20;
printf("n = %d\n", *n);
system("pause");
return 0;
}