一、地址和指针的概念。
1、变量的内容和变量的地址。
在程序运行期间,程序代码,变量,数组,等都存放在内存中,内存单元中存储的内容就是变量的值。计算机的内存是连续的存储空间。内存编织是连续的,基本单位是字节。编译后,每一个变量名对应一个变量地址。引用一个变量就是从该变量名对应的地址中取出的数据。而给变量赋值,则是将该数据按该变量的类型存入对应的内存单元中。
2、指针的概念。
地址“指向”目标变量,C语言形象的把地址叫做指针,变量的值针灸师变量的地址,指针类型就是地址类型。而存放指针的另一变量就是指针类型的变量(指针变量)
3、指针变量。
必须先定义后使用,指针变量是存放地址的,该地址所代表的变量可能是不同类型的,所以定义一个指针变量时,必须同时指定它指向的变量的类型,称之为基类型。
(1)定义格式:
类型名 *指针变量名;
(2)定义时的初始化。
可以使用&变量名来对它进行初始化。diuble *p;p=&n;
(3)指针变量的引用。
&:取地址运算符 *:指向运算符(可以互相抵消)
(4)指针变量的引用。
注意:p=&a;是给指针变量p赋值,*p=3;是给p指向的变量赋值。俩者的含义完全不同。指针变量只存放地址,不能用整形或其他非地址类型赋值给变量。
(5)两种访问变量的方式。
直接访问:直接引用变量名。
间接访问:通过指针变量和指向运算符来引用。
(6)用二级指针实现对指针变量的引用传递。
类型名 **二级指针变量名=&指针变量名;**p就是p指向的指针变量所指向的整形变量。
二、指针与数组。
1、定义指向数组元素的指针变量。
int a【8】,b【10】;
int *p=&a【0】;
p=b;
2、指针运算。
(1)指针变量可以进行指向运算和加减运算。
(2)指针变量可以加减一个整数。
(3)两个同类型的指针可以进行比较运算。
(4)C语言设置了一个指针变量,NULL,成为空指针,空指针不指向任何存储地址单元。
3、通过指针访问数组元素。
(1)*(p+i)或*(a+i)都表示数组元素a【i】,而p+i或a+i都表示a【i】的地址&啊【i】。
(2)指针变量也可以带下标,如p【i】与*(p+i)等价。
(3)注意p是变量,a是符号常量,不能给a赋值。
4、字符指针,字符数组和字符串。
(1)用字符指针访问字符数组。
对于字符数组也和其他类型的数组一样,可通过数组名和指针变量。
5、地址越界问题。
(1)用指针变量访问数组元素时,随时要检查指针的变化范围,始终不能越界。
(2)引用指针变量前一定要对它正确赋值。
(3)指针运算中注意各运算符的优先级和结合顺序。
(4)字符串整体输入时,必须要限制数组长度。