C语言

第十章-指针(知识点)

2020-03-31  本文已影响0人  逆流而上jiao

一、指针变量。

1、程序经过编译后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的。

2、按变量地址存取变量值的方式称为“直接访问”方式。

3、将地址形象化的称为“指针”。

4、变量的指针就是变量的地址;存放变量地址的变量是指针变量。

指针的理解

5、&:取地址运算符;*:指针运算符(“间接访问”运算符),取指针所指向的对象的内容。

6、(*pointer_1)++与*pointer_1++ <==> *(pointer_1++)不同。

7、指针变量做函数的参数。

二、数组与指针。

1、p=&a[0]  <==>  p=a   数组首元素的地址赋给指针变量p。

2、定义指针变量时赋初值方法:

①int *p=&a[0];  ②int *p=a  ③int *p; p=&a[0]

3、通过指针引用数组元素:

(1)p+i 和 a+i 就是 a[i] 的地址;它们指向 a 数组的第 i 个元素。

(2)*(p+i)或*(a+i)就是p+i或a+i所指向的数组元素,即a[i]。

(3)指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。

4、注意:

(1)当引用数组a[ ]时不能a++,因为数组名a代表数组首元素的地址,它是一个指针常量,它的值在程序运行期间不改变。

(2)在for循环里引用指针时,注意指向的地址,需要重新让指针回归开始指向的地址。

5、区分指针与自增自减运算符:

(1)*(p++)与*(++p)作用不同。前者先取*p,然后使p+1;后者先使p加1,在再取*p。假定p的初值为a(即&a[0]),则*(p++)为a[0],而*(++p)为a[1]。

(2)++(*p)表示p所指向的元素值加1。假如p=a,++(*p)相当于++a[0]。若a[0]=3,在用了++(*p)后a[0]+1=4。

数组a的性质

6、用指向数组的指针作函数参数。

一维数组名可以作为函数参数传递,二维数组名可以作为函数参数传递。在用指针变量作形参以接受实参数组名传递来的地址时,有两种方法:①用指针变量的指针变量;②用指向一维数组的指针变量。

main中: float score[3][4]; average(*score,10);  search(score,2);

void average(float *p,int n);   

void search(float (*p)[4],int n);

三、例题介绍。

1、P237 例题10.7 。 

10.7题目 10.7答案-形参数组 10.7答案-形参指针 10.8答案-实参指针

2、P241 例题10.9。

10.9题目 10.9答案

3、P249 例题10.13和例题10.14。

10.13题目 10.13答案 10.13分析(来自课本) 10.14题目 10.14答案

四、字符串与指针。

1、字符数组存放一个字符串。string[i] 等价于 *(string+i)

char string[]="I love China!";

2、用字符指针指向一个字符串。

char *string="I love China!"; 等价于 

char *string;  string="I love China!";  

将"I love China!"的第一个字符的地址赋值给指针变量string。

3、例题介绍。

(1)P252 例题10.17和例题10.18。将字符串a复制为字符串b。

10.17答案字符数组指针 10.18答案指针变量

(2)P254 例题10.19。用函数调用实现字符串复制。

10.19答案字符数组作参数 10.19答案实参用字符指针变量 10.19答案形参用字符指针变量

五、指向函数的指针。

格式:数据类型 (*指针变量名)(函数参数表列)

原来:

void main(){    int max(int,int);  c=max(a,b);  }    

int max(int a,int b){ };

现在的main中:

int (*p) (int,int);    p=max;   c=(*p)(a,b);

1、定义的p是一个指向函数的指针变量;p两侧的括号不可省略;

p=max:将函数max的入口地址赋值给指针变量p;

c=(*p)(a,b);  <==> c=max(a,b);  指针形式实现函数调用。

2、用指向函数的指针作函数参数。

3、P263 例题10.23。

10.23题目 10.23答案

六、返回指针值的函数。

格式:类型名 *函数名(参数表列)

例如:int *a(int x,int y);

调用它能够得到一个指向整型数据的指针(地址)。

10.24题目 10.24答案 10.25题目 10.25答案 10.25答案分析1 10.25答案分析2

七、指针数组和指向指针的指针。

1、指针数组定义:类型名 *数组名[ 数组长度 ];

例如:int *p[4] ;  <==> int *(p[4]);

指针数组中的每一个元素都相当于一个指针变量。

适用于:用来指向若干个字符串,使字符串处理更加方便。

2、P269 例题10.26。

10.26题目 10.26答案

3、指向指针数据的变量=指向指针的指针

char **p; <==> char *(*p);

char *p;   ==>指向字符数据的指针变量。

4、指针数组作main函数的形参。

void main(int argc,char *argv[ ]);

实际上实参是和命令一起给出的,也就是在一个命令行中包括命令名和需要传给main函数的参数。

命令名 参数1 参数2 ......参数n

命令名是main所在的执行文件名。文件名包括盘符、路径以及文件的扩展名。

形参argc是指命令行中参数的个数(文件名也作为一个参数)。

形参argv是一个指向字符串的指针数组。

例如:file1 China Beijing

argc=3;argv[0](是指向字符串“file1”)的值是字符串“file1”的首地址。argv[1]指向字符串“China”。argv[2]指向字符串“Beijing”。

字符串首地址构成一个指针数组
上一篇 下一篇

猜你喜欢

热点阅读