指针变量是地址箱,里面保存着指针(地址)信息的数据。
int a;Int *p=a;其实是指向a[0],int *p=a等价于int *p=a[0];
c语言可以更高效地操控计算机硬件,而这依靠地址,地址依靠指针;
内存空间比变量更接近本原,更注重内存空间的概念,变量可以理解为一段内存空间的名字;
地址值加1和指针加1的区别;
内存空间的单位是字节;
Stack里面是自顶向下分配内存
#include <stdio.h>
int main()
{
int*pc;int c[]={0,1,3,4,5,};
pc=c;
printf("c=%x\n",c);
printf("(c+1)=%x\n",c+1);
/*
pc指向c以后,*(p+n)和c[n]等价 :结合那幅内存空间图想象
*/
printf("%d",*(a+1));
return 0;
}
#include <stdio.h>
int main()
{
//想要研究为什么pc和pd,pd和pe差的字节数是这个数字返回去看视频还不够
intpc;intpc1;int c[]={0,1,3,4,5,};
int *pd;int d[]={0,1,2,3,4,};
int *pe;int e[]={9};
pc=c;pc1=&c[1];
pd=d;
pe=e;
/*
pc比pd先定义,反而内存空间中pd-pc<0,因为stack里面是自顶向下分配内存空间的;
pc和pd之间差了8个int,即32个字节;
*/
printf("pc=%x\t",pc);printf("pc1=%x\t",pc1);printf("pd=%x\t",pd);printf("pe=%x\n",pe);
printf("%d\n",pc1-pc);
printf("%d\t",pd-pc);printf("%d\n",pd-pe);
{
//十六进制换算
printf("c和c1内存空间位置差%d个字节\n",0x62fde4-0x62fde0);
printf("c和d内存空间位置差%d个字节\t",0xfde0-0xfdc0);
printf("c和e内存空间位置差%d个字节\t",0xfde0-0xfdb0);
printf("d和e内存空间位置差%d个字节\n",0xfdc0-0xfdb0);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
//void* 表示有一个指针指向内存空间,但是不知道指向的是什么
int number;
int*p=NULL;
int i;
scanf("%d",&number);
p=(int*)malloc(number*sizeof(int));//一旦用了malloc申请空间,完全可以把p当作数组来用
for(i=0;i<number;i++)
{
scanf("%d",&p[i]);
}
for(i=number-1;i>=0;i--)
{
printf("%d\t",p[i]);
}
free(p);
return 0;
}