C语言中指针知识

1.  指针格式

例如:int *p=&a;

*:在定义指针时只起到标识作用,在其他场景下标识操作指针只想空间的内容。

&:取地址符,获取变量的地址(去取首地址)。

2.  指针与变量的关系

例如:

        int a=10;

        int *p=&a;

当系统在执行时会给变量a和指针p各分配一个地址,而指针p是用来指向a的地址并保存。

p=&a;

*p=a;

p用来指向a的地址,而*p则是用来操作a地址中的内容。

3.  指针的运算

指针中保存的是地址,所以能做的运算有限。

指针能做的运算:

算数运算:+  -  ++  --

关系运算:<  >  ==  !=

赋值运算:=

4.  大小端存储问题

不同的CPU和操作系统对多字节数据的存储方式不一样,分为大端存储和小端存储。

小端存储:地址低位存储数据地位,地址高为存储数据高位。

例:假设有一个数据a=0x1234578,一个4字节地址空间为0x20~0x24。

小端存储时,在地址0x20中存储的数据为0x78,0x20中存储的数据为0x12。而大端存储刚好相反。

5.  指针和数组

数组的本质和指针类似,数组名取得是数组中第一个元素的首地址,当用指针指向数组时,其实就是指向数组的首地址。

当想用指针操作字符串时,只需要知道字符串的首地址就可以,而操作数组时还需要知道数组的长度(即元素个数)。

注意:不能对一维数组数组名去地址,对数组名去地址的操作相当于给指针升维。

6.  数组指针

本质是一个指针,指向二维数组,也叫行指针。

格式:

int s[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}

int (*p)[4]=s;

s[i][j]等价于*(s[i]+j)等价于*(*(s+i)+j)

7.  数组指针

本质是一个数组,里面的每一个元素都是一个指针。

格式:

char *p[]

p[i]指的是数组中第(i-1)个元素(指针),取出数组元素后,操作就和指针一样了。

8.  虚拟空间划分

 9.  二级指针

二级指针是用来保存一级指针地址。用作于一级指针的地址作为函数的参数传递。

变量、一级指针、二级指针的关系

int a=10;

int *p&=&a;

int **p=&p;

二级指针不能直接操作变量a的内容,可以通过操作一级指针操作a的内容。

一级指针中保存的是变量a的地址,二级指针保存的是一级指针的地址。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值