C语言

202 阅读1分钟

指针变量是地址箱,里面保存着指针(地址)信息的数据。

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;

}