#include<stdio.h>
int main(){
int *p;
int m=1;
p=&m;
printf("%d",*p);
return 0;
}
为什么这样写是正确的
#include<stdio.h>
int main(){
int *p;
int m=1;
*p=&m;
printf("%d",*p);
return 0;
}
就是不对的了
#include<stdio.h>
int main(){
int *p;
int m=1;
p=&m;
printf("%d",*p);
return 0;
}
为什么这样写是正确的
#include<stdio.h>
int main(){
int *p;
int m=1;
*p=&m;
printf("%d",*p);
return 0;
}
就是不对的了
引自免费微信小程序:皆我百晓生
在C语言中,指针用于存储变量的地址。当你声明一个指针时,你需要指定它的数据类型,以便知道它将要存储哪种类型的变量的地址。例如,在下面的代码中,int *p
声明了一个指向整型变量的指针。
#include<stdio.h>
int main(){
int *p; // 声明一个指向整型变量的指针
int m = 1; // 定义一个整型变量并赋值为1
p = &m; // 将变量m的地址赋给指针p
printf("%d", *p); // 输出指针p所指向的变量m的值
return 0;
}
在这段代码中,首先声明了一个名为p
的指针,然后定义了一个整数变量m
并将其值设为1。接下来,通过p = &m;
这行代码,我们将变量m
的地址赋给了指针p
。最后,我们通过*p
访问指针p
所指向的内存位置(即变量m
的值),并将其打印出来。
然而,如果你尝试像这样操作:
#include<stdio.h>
int main(){
int *p;
int m = 1;
*p = &m; // 错误:试图让指针p的值等于m的地址,而不是将m的地址赋给p
printf("%d", *p);
return 0;
}
这段代码中的问题是,你在第二行声明了一个指针p
但没有初始化,也就是说,此时p
的值是未定义的。接着,在第三行,你试图将m
的地址赋给*p
,也就是指针p
所指向的位置,而不是将m
的地址赋给p
本身。这会导致程序行为不确定,因为p
可能还没有被正确地初始化,所以可能会读取到无效内存区域,进而导致错误或崩溃。
因此,正确的做法是先将m
的地址赋给p
,再通过*p
访问m
的值。