* :取值操作符
&:取址操作符
一、指针与指针变量的区别:指针变量的值(即指针变量中存放的值)是地址(即指针)
二、定义指针变量时要注意必须指定基类型
三、如果 pointer_1 = &a 则&*pointer_1 = &a(因为*和&优先级相同,自右向左结合) *&a 和 *pointer_1也是相同的
即 *&a = a
(*pointer_1)++ 相当于 a++ 括号不能省略
四、数组与指针
数组元素的指针就是数组元素的地址
引用一个数组元素:a. 下标法 如 a[ i ]
b. 指针法 如*(a+i)或*(p+i)
a 时数组名,p 是指向数组元素的指针变量,其初值 p = a( 等价于 p=&a[ 0 ] )
数组名可翻译成数组的第一个元素的地址
二维数组
*(p+i)+j 是二维数组 i 行 j 列的元素的地址,*(*(p+i)+j)是 i 行 j 列的元素的值
五、字符串与指针
存取方法: 下标法 指针法
字符数组和字符指针的区别:
a. 字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址)
b. 字符数组只能对各个元素赋值,不能用这种方法:
char str[20] ;
str = " Hello ! " ;
字符指针则可以这样赋值:
char * a;
a = " Hello ! " ;
注意赋给 a 的不是字符,而是字符串的第一个元素的地址
c. 对字符指针变量赋初值 char * a = " Hello ! " ; 等价于 char * a;
a = " Hello ! " ;
d. 正确: char str[10] ;
scanf( " % s ", str ) ;
错误: char * a ;
scanf( " % s ", a ); // 如果指针变量没有赋初值,就会随机指向
e. 指针变量的值可以改变
f. 若定义了一个指针变量,并使它指向一个字符串,则可用下标形式引用指针变量所指的字符串中的字符
六、指针函数和函数指针的区别
指针函数是指带指针的函数,即本质是一个函数
函数指针是指向函数的指针变量,因而函数指针本身首先应是指针变量,只不过该指针变量指向函数
七、指针数组和指向指针的指针
指针数组:一个数组,若其元素均为指针类型数据,则称为指针数组,即指针数组中的每一个元素都相当于一个指针变量
例: int *name[4] ;
指向指针的指针定义形式: char **p ; //相当于 *( * p)