天天看点

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

<a href="http://www.itzhai.com/c-language-syntax-notes-advanced-usage-of-two-dimensional-array-of-pointers-to-a-pointer-list-pointer-array-pointer-structure.html">C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com</a>

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 指针数组: 在一个数组中,如果它的元素全部都是指针类型的数据,那么这个数组称为指针数组。 定义:类型名 *数组名[数组长度]; char *suit[3] = {"first","second","third"}; 指向指针的指针: 如果一个变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针数据的指针变量,又称多级指针,简称为指向指针的指针。 定义:类型标识符 * * 指针变量名; 利用指针变量访问另一个变量就是“间接访问”,在一个指针变量中存放一个目标变量的地址,就是“单级间址”。 对于数组suit,由于数组名本身就表示地址,所以可以直接创建二级指针:

指向二维数组的指针: 二维数组的地址: a=a[0][0]=a[0] a+1=a[1] a[0]+1=a[0][1] a是行指针,*a是列指针,**a表示a[0][0]的值,*a表示a[0]的地址。 a[1]+2 等价于 *(a+1)+2 在行指针前面加上一个*就转换为了列指针,若a和a+1是行指针,则*a和*(a+1)是列指针。 指向数组元素的指针变量

指向由m个元素构成的一维数组的指针变量 这种指针使得p+1不是指向a[0][1],而是指向a[1],p的增值以一位数组的长度为单位,这种指针称为行指针。 数据类型 (*指针变量名)[N]; int a[4][3], (*p)[3]; 返回指针的函数

指向函数的指针 指向函数的指针的一般定义形式: 数据类型 (*指针变量名)(参数类型列表) 调用方式: (*指针变量名)(实际参数列表)

带参数的main函数

argc表示命令行参数个数,argv表示参数数组 指向结构体的指针

指向结构体数组的指针 指向结构体数组的指针实际上与前面定义的指向二维数组的指针类似,可以理解为二位地址数组的行指针。 动态内存分配: void *malloc(unsigned int size);

void free(void *p) 链表结构:

继续阅读