第7章-指针
第七章 指针
君子和而不同,小人同而不合
指针初探
- 定义一个指针
int *pnumber; // 也可以 int *pnumber;
两种定义的方式是一样的,最好坚持使用一种方式,不要混着用
指针的声明没有什么特别之处。可以用相同的语句声明一般的变量和指针:
double value, *pVal, fnum;
由此,在定义指针的时候尽量让 *
跟着变量名
下面容易引起误解
int *p, q;
上面这条语句声明了两个变量:指针 p 和 整型变量 q ; 而不是p和q都是指针
- 初始化指针
如果用已声明的变量地址初始化pointer变量,可以使用寻址运算符&
int number = 99;
int *pnumber = &number;
未初始化的指针是非常危险的,在使用指针的时候要对其进行初始化
int *pnumber = NULL;
- 通过指针访问值
使用间接运算符*
可以访问指针所指的变量值,这个运算符也称之为取消引用运算符
int number = 15;
int *pointer = &number;
int result;
result = *pointer + 5;
printf(“%d”, result);
- 取指运算符的运算顺序
看下面的这个例子:
int num = 5;
int *p = #
++*p; //运行后num=6
(*p)++ //运行后num=7
上面的例子中第三行++*p不需要加括号,因为++
和*
是同级运算符,同级运算符从后往前运算不需要添加括号怕
而(*p)++如果不添加括号的话就会变成是指针加一然后取值。
为了避免错误,不管++在前面还是在后面都加上括号。
- 指向常量的指针
声明指针时,可以使用const关键字指定,该指针指向的值不能改变,下面是声明const指针的例子:
long value = 9999L;
const long *pvalue = &value;
下面的语句会导致错误:
*pvalue = 8888L;
pvalue指向的值不能改变,但是可以对value的值进行任意操作。
value = 7777L;
改变了pvalue的值,但是不能使用pvalue指针做这个改变,指针本身也不是常量,可以改变指针中存储的地址,但是不允许使用指针改变它指向的值。
==就很无语,怎么会有这样的设计==
- 常量指针
下面的语句可以使指针总是指向相同的对象:
int count = 43;
int *const pcount = &count; //定义一个常量指针
该指针存储的地址不能改变
int item = 34;
pcount = &item // 会报错
但是使用pcount, 仍然可以改变pcount的值:
*pcount = 345;
还可以直接使用count改变这个值
还可以创建一个常量指针,指向一个常量值
int item = 25;
const int *const pitem = &item;
pitem 是一个指向常量的指针,所有的信息都是固定不变的。
- 指针的命名
当程序写的相当大了,很难记住哪个是一般变量,哪个是指针,最好将P作为指针名的第一个字母
==待更==