int main(int argc, char* argv[])
{
int* p2;
p2 = (int*)malloc(sizeof(int));
scanf("%d", p2);//5
printf("%d\n", *p2);//5
int* p3;
int i = 5;
p3 = &i;
printf("i=%d,p3=%d\n", i, *p3);
printf("i的地址=%p p3的地址=%p", i, p3);
}
**问题1:为什么不分配动态内存就不能用scanf给p2赋值,明明p2就是个指针变量,用scanf给他一个值的地址这样的理解是不是出错了?还是我对scanf的理解有问题,如果可以还请麻烦你详细解释一下
问题2: p3=&i,的意思是是将i的变量地址给p3吗?如果是,为什么两个地址输出的不一样,如果不是,请问这段p3=&i是什么意思?
**
问题1:p2是个指针变量,是用来存放地址值的一个变量,只有4个字节的空间。
用scanf()输入的时候,如果没用malloc()分配一个空间地址给它,它里面就
是一个随机值,对这个随机值的操作就是非法的。
p2 = (int*)malloc(sizeof(int));这句与:p3 = &i; 一个意思,就是将
一个变量的地址值存入 p2 或 p3 里,也就是让指针 p2 p3 指向两个变量。
问题2:把 printf("i的地址=%p p3的地址=%p", i, p3);修改为:
printf("i的地址=%p p3里的值=%p p3自身的地址=%p", &i, p3, &p3);看看。
int a
,然后scanf("%d", &a);
如果对你有帮助,还请点个采纳,万分感谢!