动态分配内存之后,会改变原来指向的内存吗?
#include <stdlib.h>#include <string.h>
int main(void)
{
int a;
int *pi = &a;
pi =(int *)malloc(sizeof(int));
a = 520;
if(pi==NULL)
{
printf("allocation failed.\n");
exit(1);
}else{
printf("*pi = %d\n", *pi);
printf("a = %d\n", a);
}
free(pi);
return 0;
}
****************************
打印结果:
*pi = 0
a= 520
****************************
问题:
为什么*pi指向了a的地址,但是a的值变了之后,*pi不会随之改变呢?
发现,如果不给pi动态分配内存的话,*pi的值是会改变的。这是为什么呢?动态分配内存之后,会改变原来指向的内存吗?
本帖最后由 jackz007 于 2019-11-10 16:16 编辑
#include <stdlib.h>
#include <string.h>
int main(void)
{
int a ;
int * pi = & a ; // pi 指向 a
pi =(int *) malloc(sizeof(int)) ; // pi 指向新分配的整型变量,从此,pi 与变量 a 完全脱离关系
a = 520 ; // a 的值改变
if(pi == NULL)
{
printf("allocation failed.\n") ;
exit(1);
} else {
printf(" * pi = %d\n" , * pi); // * pi 自分配空间后,尚未赋值,所以,* pi 的数值不定。
printf("a = %d\n", a) ; // a 的值为 520 很正常
}
free(pi) ;
return 0 ;
}
页:
[1]