C语言知识补充之指针

#这只是身为我结合书本的个人的理解,肯定有很多错的地方,请勿喷

指针——C语言的灵魂

1. 指针概述

  “指针”就是内存地址,使用指针访问变量,就是直接对该内存中的数据进行的操作。相比于之前学习的知识,合理使用指针可以有效提高程序运行的速度和灵活性。

2. 指针变量概述

(1)定义:

  专门用来存放另一个变量地址的变量,称为指针变量

(2)有关的运算符

  取地址运算符:&。如&m,返回变量m的地址。

  取值运算符:*。如*m,访问指针变量m指向的地址上的内容

(3)指针变量的定义,如:

int *p;   //定义了一个指针变量p,p只能存放整型变量的地址。

(4)指针变量的赋值,如:

p=&i;     //将i的地址赋给指针变量p
p=p+m;    //p的值=i的地址+i的数据类型字节×m

(5)指针变量实际使用情况:

  访问内存中的数据由两种方法,直接访问和间接访问。直接访问就是之前的通过变量名直接访问,间接访问就是通过指针访问。实际上对单个变量使用指针没有任何意义,对数组、字符串等使用才有更大的意义。

3. 指针变量与函数

  关键点:既然指针变量本质上也是变量,那么也可以指向函数或者作为函数的返回值使用

(1)函数指针

  定义:函数指针就是一个指向函数(存放函数地址)的指针。每个函数在编译时,会被分配一个入口地址,一般函数名就是该入口地址。

  指向函数的指针变量的定义:函数类型 (*指针变量)([形参]),如:

int (*p)(int x,int y)            //说明p可以用来指向参数形式是(int,int)的函数

  使用格式:指针变量=函数名。如:

p=max;        //p指向函数max(int,int)
(*p)(a,b);        //相当于使用了max(a,b)

(2)指针函数

  定义:指针函数就是函数的放回值是指针。

  此类函数定义格式:如:类型    *函数名([形参]){函数体},如int *max(int *a,int *b);

  注意:形参是实参的拷贝,仅在函数内部改变形参的值,并不会影响到实参的值。

  实际使用情况:理解使用malloc()申请内存的时候会用到。

4. 指针与数组

  关键点:数组在内存中连续存储的性质。

(1)一维数组中数组名就是首地址。例如a[10],a就是该数组首地址,也就a[0]的地址。

(2)二维数组中,如a[10][10],a就是a[0][0]的地址,a[8]就是a[8][0]的地址,a[9]就是a[9][0]的地址

(3)利用指针引用数组可以采用偏移量引用,如:

int a[10];
int *p=a;
for(i=0;i<10;i++)
    scanf("%d",p+i);

(4)函数中实参如果为数组,则传递给函数的形参只写数组名即可。

(5)数组也有指针,如int *a[10],则10个元素均为指针变量。

5. 指针与字符串

  关键点:字符串也是数组,使用方法和数组一样。

posted @ 2021-08-15 15:23  Pangenda  阅读(164)  评论(0)    收藏  举报