第五章 指针和数组
5.1 指针于地址
指针是一种保存变量地址的变量,指针和数组有着密切的练习。
标准C中引入void *代表通用指针类型(具体介绍看其他的博文)
在学习指针之前,先看我们的内存是如何组织的:
通常机器都有一系列连续编号或编址的存储单元,这些存储但愿可以单个进行操作,也可以以连续成组的方式操作。
通常机器的一个字节存储单元可以存放一个char类型的数据,两个相邻的字节存储单元可存储一个short类型的数据,而4个相邻的字节存储单元可存储一个long类型的数据。
指针是能够存放一个地址的一组存储单元(通常是两个或4个字节)。例如:变量c的类型是char,指针p是指向c的指针变量,则
指针变量的声明:int *ip;表明表达式*ip的结果是int类型的。double *dp, atof(char *);表示*dp和atof(char *)函数的值都是double类型的。
指针只能指向某种特定类型的对象,也就是说,每个指针都必须指向某种特定的类型数据。(void *指针除外)。
优先级:一元运算符*和&的优先级比算术运算符的优先级高,所以
1 y = *ip +1;//把ip指向的对象的值取出来,加1后赋值给y 2 //一下三种写法是等价的 3 *ip += 1;//将ip指向的对象的值加1 4 ++*ip; 5 (*ip)++;
但是注意:(*ip)++中的圆括号不可少,否则是对ip进行加1运算,而不是对ip指向的对象进行加1运算。因为类似于这样的一元运算符遵循从右至左的结合方式。(这里测试两者的不同之处,代码实例)。
5.2 指针和数组