一.指针的概念:
变量在储存时,内存被分为一块一块的,每一块都有一个特有的编号,而这个编号可以暂时理解为指针,就像酒店的门牌号一样。
.
1.此时可理解为10住进了门牌号(地址)为 pa 的一个房间,可以通过门牌号 pa 找到房间,住进 a 房间中,这里的门牌号 pa 便可理解为指针。
.
.
.
二.指针变量和指针的类型
1.指针变量就是一个变量,它储存的内容是一个指针。用前面的例子,皆可以将指针变量理解为一张房卡,房卡储存量房间号的信息。
2.在我们定义一个变量时,要确定它的类型(int,float,char...),在定义指针变量时也是一样的,必须确定指针类型。就像你只能用酒店A的房卡储存酒店A房间号的信息一样
.
.
.
三.指针变量的使用
1.指针变量的定义形式:数据类型 *指针名
2.由下图可知:p就是指针变量,亦可以说明*p中储存的是a中的值,变量p中储存的是 a的地址
3.要用%p,打印出a的地址
4.变量类型亦可是char ch = 'w' ; char * pc = &ch
.
.
.
三.取地址运算符(&)和指针运算符(*)的使用
1.指针运算符*(间接寻址符):与&为逆运算,作用是通过操作对象的地址,获取存储的内容,并可修改存储的内容。*解引用操作符,意思就是通p中存放的地址,找到p所指向的对象,*p就是p所指向的对象。例如,x = &i,x为i的地址,*x则为通过i的地址,获取i的内容
2.取地址运算符&:单目运算符&是用来取操作对象的地址。例如,&i为取变量i的地址,用%p输出。对于常量表达式,寄存器变量不能取地址(因为他们储存在储存器中,没有地址)
3.指针变量和其他变量一样,在定义时可以赋值,即初始化。也可以也可以赋值“NULL”或“0”,如果赋值“0”,此时的“0”含义并不是数字“0”,而是NULL的字符码值
4.“&”和“*”的结合方向:“&”和“*”都是右结合的。假设有变量x = 10,则 *&x 的含义是,先获取变量 x 的地址,再获取地址中的内容。因为“&”和“*”互为逆运算,所以可得到x = *&x
5.练习:输入x,y两个整数,其中较大的值赋给x
.
.
.
四.不同类型的指针所占用的内存大小
1.不管什么类型的指针,都是在创建指针变量
2.指针变量是用来存放地址的
3.指针变量的大小取决于一个地址存放的时候需要多大空间
4.//32位机器上的地址:32bit位-4byte,所以指针变量的大小是4个字节
5.//64位机器上的地址:64bit位-8byte,所以指针变量的大小是8个字节
.
.
.
五.指针运算
1.赋值运算可以相互赋值,也可以赋值某个变量的地址,或者赋值一个具体的地址
2.指针与整数的加减运算
(1)指针变量的自增自减运算,指针加一或减一运算,表示指针向前或向后移动一个单元(不同类型的指针,单元长度不同)
(2)指针变量加上或减去一个整型数,和第一条类似,具体加几就是像前移动几个单元,减几就是向后移动几个单元
(。。。。。。剩余内容以后深入了解)