关于指针和动态内存分布的总结(基础)

关于指针和动态内存分布的总结(基础)

指针是C语言最重要的概念之一,用于储存变量的地址

概念介绍:

&为取地址符
ptr=&pooh;
我们说ptr指向“pooh”,ptr和&pooh的区别就是ptr是变量,而&pooh是常量。或者,ptr是可修改的左值,而&pooh是右值。

int i=0;
scanf(%d”,i);/*将输入的数存入i所表示的地方,即地址为0的地方,程序崩溃*/
scanf(%d”,&i);/*将输入的数存入i所在的地址*/

*为间接运算符

int  *p/*定义一个指针p*/

可以使用printf”%d,p”通过地址来访问内存区域,此方法称为间接访问内存
**Attention:不要将指针中的与二元运算符乘法中的
搞混

指针的声明和初始化:

声明中必须加*,如果同时要声明两个指针,必须在两个指针变量前都加上*
一个指针变量可以赋值给另一个相同类型的指针变量

1.int a;
int *p=&a;
2.int a=-123;
int *p,*q;
p=&a;/* 为p初始化,p指向a */
q=p;/* 为q初始化,q也指向a */

Attention:
1.指针可初始化为NULL或者0,称为空指针
2.指针类型必须与其指向变量的类型一致
3.先定义指针后初始化时千万不能在指针名前加*
4.所指的变量必须在指针前定义好

用指针处理变量

格式* 地址表达式
如* p就可以等同于地址中所表达的那个数字(字符),即*p可以看做数字去处理,同时也可以通过指针对地址中的数进行处理

在这里插入图片描述
取地址运算(&)和间接运算()互为逆运算,当两者在一个表达式内相遇可以相互抵消
&a等价于a,&*pa等价于pa
我们可以定义空类型的指针,空类型的指针又称万能型指针。void型指针由于所指向的数据区类型不确定,所以不能对void型指针进行间接运算

char c;
char *pc;

int sizeofc =sizeof(c);
int sizeofpc =sizeof(pc);
int sizeofpStarc =sizeof(Starc);

printf(sizeof(c)=%d”,sizeofc);
printf(sizeof(pc)=%d”,sizeofpc);
printf(sizeof(*c)=%d”,sizeofStarpc);

由以上程序可以看出,指针pc因为是十六进制数,所以占用空间均为4位,而c和*pc均和类型有关。

多级指针

指向一级指针的称作二级指针,指向二级指针的称为三级指针,以此类推
(1)定义几级指针就在指针名前加几个星号

int a=10;
int *p;/*一级指针*/
int **pp;/*二级指针*/
int ***ppp;/*三级指针*/
p=&a;
pp=&p;
ppp=&pp;

(2)只有同类型同级别的指针才可以相互赋值

char c;
char *pc;
int a;
int *pa;
int **ppa;

pc=&c;/*合法,把变量地址赋给一级指针*/
pa=&a;/*合法,把变量地址赋给一级指针*/
ppa=&pa;/*合法,把一级指针赋给二级指针*/

pc=&a;/*不合法,变量和指针类型不同*/
ppa=&a;/*不合法*/

(3)使用多级指针处理数据时,几级指针就要实施几次间接运算

a=58;
p=&a;
q=&p;

printf(%3d”,a);/*使用变量名直接访问*/
printf(%3d”,*p);/*使用一级指针间接访问*/
printf(%3d”,**p);/*使用二级指针间接访问*/


未完待续。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值