关于指针数据类型

以下内容主要参考自《C程序设计(第四版)》(作者是谭浩强)。

小白发现,指针在代码中用途广泛、灵活多变,用得好可以简化代码、方便开发,使用不当则容易使程序崩溃,后果十分严重。下面整理一些常见的指针数据类型,方便更好地掌握指针的用法。

int i;		 // 定义整型变量i

int *p;		 // p为指向整形数据的指针变量

int a[n];	 // 定义整型数组a,它有n个元素,数组名a可以看做一个指针,指向数组的首地址

int *p[n];	  //定义指针数组p,它由n个指向整型数据的指针元素组成

int (*p)[n];	  // p为指向含n个元素的一维数组的指针变量,注意只是一个指针变量!!

int f();	  // f为带回整型函数值的函数

int *p();	 // p为带回一个指针的函数,该指针指向整型数据

int (*p)();	// p为指向函数的指针,该函数返回一个整型值

int **p;	 // p是一个指针变量,它指向一个指向整型数据的指针变量

20190626

  1. 指针:一个变量的地址成为该变量的指针。(例如i_pointer = &i,&为取地址符,i_pointer的值为变量 i 的地址,就是 i 的指针)
  2. 指针变量:用于存放变量地址(即指针)的变量。
  3. 相关运算符:&为取地址运算符, * 为指针运算符(或称间接访问运算符)
  4. 定义指针的一般形式:基类型 * 指针变量名,例如float * pointer_3, char * pointer_4等。
  5. 关于运算符的使用举例:
    (1)已知pointer_1 = &a,&* pointer_1的含义是什么?&和 * 的优先级相同,按自右至左方向结合。则*pointer_1就是变量a,再执行&运算,即& *pointer_1表示变量a的地址。
    (2) * &a 的含义是什么?先执行&a,得到a的地址,再进行 *运算,即&a所指向的变量, *&a等价于a。
  6. 数组与指针:
    定义数组和指向其首地址的指针,
    int a[10];
    int *p;
    p = &a[0]; // 由于数组名表示数组的首地址,故等价于p = a
    (1)p+i和a+i为a[i]的地址,执行a数组的第i个元素。
    (2) *(p+i)或 *(a+i)是p+i或a+i所指向的数组元素,即a[i],三种表示方式等价。 *(p+i) = t; 将值t赋给a[i]。
    (3)指针和自加符的运算示例:
    p++,使p指向下一元素,即a[1]。
    *p++,等价于 *(p++),先得到p指向的变量的值,然后再使p的值加1,指向下一元素。
    *(++p),先使p加1,再取 *p,即得到下一元素的值。
    ( *p)++,表示p所指向的元素值加1.

你可能感兴趣的:(编程语言)