10th
10.1 地址指针的基本概念................................................................................... 1
10.2 变量的指针和指向变量的指针变量.............................................................. 2
10.2.1 定义一个指针变量................................................................................ 3
10.2.2 指针变量的引用................................................................................... 3
10.2.3 指针变量作为函数参数......................................................................... 7
10.2.4 指针变量几个问题的进一步说明......................................................... 10
10.3 数组指针和指向数组的指针变量................................................................ 13
10.3.1 指向数组元素的指针.......................................................................... 13
10.3.2 通过指针引用数组元素....................................................................... 14
10.3.3 数组名作函数参数.............................................................................. 16
10.3.4 指向多维数组的指针和指针变量......................................................... 22
10.4 字符串的指针指向字符串的针指变量......................................................... 25
10.4.1 字符串的表示形式.............................................................................. 25
10.4.2 使用字符串指针变量与字符数组的区别.............................................. 28
10.7 指针数组和指向指针的指针....................................................................... 31
10.7.1 指针数组的概念................................................................................. 31
10.7.2 指向指针的指针................................................................................. 34
10.7.3 main函数的参数................................................................................. 36
10.8 有关指针的数据类型和指针运算的小结..................................................... 37
10.8.1 有关指针的数据类型的小结................................................................ 37
10.8.2 指针运算的小结................................................................................. 37
10.1.1 有关指针的数据类型的小结
定义 |
含 义 |
int i; |
定义整型变量i |
int *p |
p为指向整型数据的指针变量 |
int a[n]; |
定义整型数组a,它有n个元素 |
int *p[n]; |
定义指针数组p,它由n个指向整型数据的指针元素组成 |
int (*p)[n]; |
p为指向含n个元素的一维数组的指针变量 |
int f(); |
f为带回整型函数值的函数 |
int *p(); |
p为带回一个指针的函数,该指针指向整型数据 |
int (*p)(); |
p为指向函数的指针,该函数返回一个整型值 |
int **p; |
P是一个指针变量,它指向一个指向整型数据的指针变量 |
10.1.2 指针运算的小结
现把全部指针运算列出如下:
1) 指针变量加(减)一个整数:
例如:p++、p--、p+i、p-i、p+=i、p-=i
一个指针变量加(减)一个整数并不是简单地将原值加(减)一个整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数加(减)。
2) 指针变量赋值:将一个变量的地址赋给一个指针变量。
p=&a; (将变量a的地址赋给p)
p=array; (将数组array的首地址赋给p)
p=&array[i]; (将数组array第i个元素的地址赋给p)
p=max; (max为已定义的函数,将max的入口地址赋给p)
p1=p2; (p1和p2都是指针变量,将p2的值赋给p1)
注意:不能如下:
p=1000;
3) 指针变量可以有空值,即该指针变量不指向任何变量:
p=NULL;
4) 两个指针变量可以相减:如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。
5) 两个指针变量比较:如果两个指针变量指向同一个数组的元素,则两个指针变量可以进行比较。指向前面的元素的指针变量“小于” 指向后面的元素的指针变量。
10.1.3 void指针类型
ANSI新标准增加了一种“void”指针类型,即可以定义一个指针变量,但不指定它是指向哪一种类型数据。