c语言指针详细讲解
C语言中指针是一种数据类型,指针是存放数据的内存单元地址。
计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节,为了便于管理,必须为每个存储单元编号,该编号就是存储单元的“地址”,每个存储单元拥有一个唯一的地址。
指针变量除了可以存放变量的地址外,还可以存放其他数据的地址,例如可以存放数组和函数的地址。
c语言结构体指针如何定义和使用
结构体指针可以定义为指向结构体变量的指针,其格式如下:
使用:
1.结构体指针可以用于访问结构体变量的成员。
2.结构体指针可以被用于传递结构体变量的地址给函数。
3.结构体指针可以存储另一个结构体变量的地址,从而创建链表结构。
c语言指针数组的用法
一维数组指针
一维数组的指针是直接将一维数组的首地址赋予指针变量,之后通过指针变量的运算逐渐输出一维数组中的各个元素的值。
例如:int a[20];
int *p;
因为数组名相当于一个指针指向的就是一维数组的首地址(例如a[0]),所以可以直接将数组名赋予指针变量(例如p=a),无需加取地址符&;也可以让指针变量指向第一个元素的地址(例如p=&a[0]);即p=a与p=&a[0]是等价的,(应当要注意的是:p=a是将数组首元素的地址赋给指针变量,而非将数组a的各元素的值赋给指针变量)
如果一个指针变量p已经指向数组中的一个元素,则p+1指向数组中的下一个元素,p-1指向的是数组中的上一个元素。(注意:执行P+1或P-1时,并不是将P的值简单的加1,而是加上一个数组元素所占用的字节数,例如:float型,每个元素占4个字节,所以p+1意味着使p的地址加4个字节,以便让其指向下一个元素)
这里的a+i与p+i是等价的,也可以用数组名进行运算;
e
*(a+i)==*(p+i);
二维数组指针
令int a[2][3]={{1,2,3},{4,5,6}}
在二维数组中数组名指向数组的首元素,但是不是简单的表示一个简单的元素,而是由多个元素所组成的一维数组,因此数组名指的是二维数组首行(即下标为0的那一行)的首地址,a+1即表示下标为1的那一行元素,又因为数组名代表首元素的地址,所以a即代表二维数组中a[0][0]的值,a+1即a[1][0]的值。a[0]等价于*(a+0),a[1]等价于*(a+1),(a+1)+1的值即&a[1][1]。要想得到a[1][1]的值,就要再进行取值,即(a[1]+1)或*((a+1)+1)为a[1][1]的值。(注意:(a+i)与a[i]是等价的)
切记二维数组名是指向二维数组首行,而非指向二维数组a[0][0];
二维数组在指向行的指针前加*,就转化为了指向列的指针,反之,在二维数组指向列的指针前加&,就转化为了指向行的指针.(例如:&a[i]或a+i指向行.而a[i]或*(a+i)则指向列)
在定义时的int (*p)[4]的意思是指针变量p指向包含四个整型元素的一维数组,即在二维数组中一共有四行元素