A Byte of Pointers

A Byte of Pointers

2020, May, 25th

这次稍微记录一下C语言里的指针的用法。

指针类型,同整型、浮点型等数据类型类似,是C语言里一种基本的数据类型,不同的是,指针类型存储的数据表示地址。
关于取值运算符和取址运算符,前者返回一个指针变量所存储的地址上的内容,而后者返回变量在内存块上的地址。

举个例子(可能很不恰当),内存块就像是一条街道,街道上的房子从南到北依次用1号、2号等标上门牌号(内存块上面的每一个地址都是用32位的2进制数表示)。
当执行“int a=3;”时,相当于在这个街道上找一个空房子(比如找第233号房子),往房子里面塞一个整型数3,并用名称‘a’标识这栋房子(如“小a之家”)。当执行“&a”取址时,返回的值是233(即小a之家的门牌号)。

当执行“int *b=a”时,相当于在这条街上又找了一个空房子(比如2233号),往房子里塞一个指针型数(&a),并把这栋房子称为“小b之家”(在门牌号为2233的房子里塞了一个值233)。这里,指针变量b的值为233(与整型变量a的值为3的低位相同),执行“*b”时,返回的值为3,即门牌号为233的房子里的住户;执行“b”时,返回的是233(即b的值);执行“&b”时,返回的值为2233(即b住户的门牌号)。

int *p;   //声明一个指向int类型的指针,用p标识
int p[3]; //声明一个有三个元素的整型数组

int *p[3];//声明一个指针数组
int (*p)[3];//声明一个指向整型数组的指针

/*注:运算符的结合性:()>[]>* */

int **p;//声明一个指向(整型)指针的指针

int p(int);//声明一个函数:该函数名为p,传入参数为一个整型数,返回一个整型数

int (*p)(int);//声明一个指向某一类函数的指针,该类函数的传入参数为一个整型数,返回值为一个整型数

int *p(int);//声明一个函数,该函数名为p,传入参数为一个整型数,返回一个指向整型数的指针

int (*p[3])(int);//声明一个指针数组,该数组里的指针指向传入int、返回int的函数

/*再复杂的大概我也整不明白了*/  /*2020.5.26th*/

/*下面两种方式的在多数情况下效果相同*/
int p[10];  //声明一个长度为10的整型数组
int *const q=(int *)malloc(sizeof(int)*10);//声明一个指向整型的常量指针,并为其分配连续的10个整型大小的空间

/*数组名在多数时候课看作是const指针类型*/
/*“数组名[下标]”的索引方式和“指针+偏移量”的索引方式是等价的*/
p[3];   //数组名[下标]
*(p+3);//*(数组名+偏移量)

q[3];//指针名[下标]
*(q+3);//*(指针名+偏移量)

两个同类型指针不能做加法,但可以做减法,得到的是偏移量。


(下次记一波&和*运算符)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值