1.指针:一种数据类型,指针是存放数据的内存单元地址。
eg: int A=23,
地址p1=OXAO;
&p1=OXBO;
*p1=23;
2.*可以在类型名(int)后也可以在变量名前
3.声明一个指针后,要对指针进行初始化,一般为NULL
4.指针可以直接赋值成为某变量的地址,就是像该指针指向这个变量
5.*或者&,可以修改或访问指针的指向变量值
取地址运算符&:&是用来取操作对象的地址。例:&i 为取变量 i 的地址。对于常量表达式、寄存器变量不能取地址(因为它们存储在存储器中,没有地址)
指针运算符*(解引用运算符 ):与&为逆运算,作用是通过操作对象的地址,获取存储的内容。例:x = &i,x 为 i 的地址,*x 则为通过 i 的地址,获取 i 的内容
6.指针运算:指针变量的自增自减运算。指针加 1 或减 1 运算,表示指针向前或向后移动一个单元
两个指针指向同一空间时,可以出现指针减指针(通过地址相减,本质还是两个指针相减)
相减就表示两个元素的距离eg:&arr[9]-&arr[0]=9
7.野指针:指向的内存地址是未知的(随机的,不正确的指向的内存地址是未知的(随机的,不正确的)不可对野指针进行赋值操作野指针成因:指针未初始
化(指向的空间是随机的)或者指针越界访问(指针指向的范围超出了合理范围,或者调用函数时返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放)或者指针释放后未置空(指向无效内存)
所以要避免返回局部变量的地址,开辟的指针释放后置为NULL
8.数组指针是一个指针变量,占有内存中一个指针的存储空间;数组指针即指向数组的指针,如:char (*array)[5];含义是一个指向存放5个字符的数组的指针
&arr和arr,虽然值一样,但是意义不一样
&arr 表示的是数组的地址,不是数组首元素的地址
&arr 的类型是: int(*)[10] ,是一种数组指针类型。
数组的地址+1,跳过整个数组的大小