c语言的指针问题
(1)
请注意下面的指针地址
#include<stdio.h>
void main()
{
int a=5,b,*p,d;
int e;
p=&a;
printf("%x,%x,%x,%x,%x,%x,%x",&a,&b,&p,&d,&e,p,*p);
}
结果:
12ff7c,12ff78,12ff74,12ff70,12ff6c,12ff7c,5Press any key to continue
(2)
请注意下面的地址在释放前后没有改变,是否会带来危害,释放没有吧它制空。
由于没有制空,p还保留了指向的地址,free也不会把指向的地址的值清空。不知
大家可否把它的数据恢复过来。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int *p=(int*)malloc(sizeof(int)*10);
printf("%x,%x\n",&p,p);
free(p);
printf("%x,%x\n",&p,p);
}
结果:
12ff7c,430040
12ff7c,430040
Press any key to continue
(3)
下面代码为什么内存读写出错。而(4)是正确的
int *p=(int*)malloc(sizeof(int)*10);
与int *p,a[10]
p=a;
有什么区别
void main()
{
int *p=(int*)malloc(sizeof(int)*10);
int *q=(int*)malloc(sizeof(int)*10);
for(int i=0;i<10;i++) *p++=1;
for(i=0;i<10;i++) printf("%d",p[i]);
printf("%x,%x\n",&p,p);
free(p);
printf("%x,%x\n",&p,p);
}
(4)可以
void main()
{
int *p=(int*)malloc(sizeof(int)*10);
int *q=(int*)malloc(sizeof(int)*10);
for(int i=0;i<10;i++) p[i]=1;
for(i=0;i<10;i++) printf("%d",p[i]);
printf("%x,%x\n",&p,p);
free(p);
printf("%x,%x\n",&p,p);
}