C语言学习之指针数组和数组指针

📅 2026/8/4 2:45:38
C语言学习之指针数组和数组指针
今天学习了指针数组和数组指针相较于之前学习过指针来讲今天学习的算是之前从未接触过的新知识算是知识上的盲区指针变来变了去对概念的理解也逐渐的模糊了所以接下来的时间要好好去琢磨这一块的知识争取能啃下来这块硬骨头1.void指针1.主要用于存放内存空间地址2.函数传参不同类型的指针可以通过转换为void*传参将内存地址为0x12345678的空间赋值为0x11223344 *((int *)((void *)0x12345678) 0x11223344;2.二级指针1.函数中想要修改函数外的指针变量的时候就要使用二级指针2.指针数组传参要传二级指针和长度#includestdio.h void fun(char **ptemp) { *ptemp hello; return; } int main(void) { char *p NULL; fun(p); printf(%s\n,p); return 0; }注这段代码定义的函数想要修改函数外的指针变量就要使用二级指针否则在定义函数形参的时候定义指针类型的形参就是值传递形参是实参的副本实参永远得不到改变3.指针数组1.指针数组是数组数组指针是指针int *a[5] //定义了一个int类型的指针数组里面存放了五个指针每个指针8个字节这个数组占40个字节2.字符串存储用字符型数组操作字符串用指针3.字符串数组存储用二维字符型数组操作字符串数组用指针数组4.数组指针1.指针指向一个数组int a[5] {1,2,3,4,5}; int (*p)[5]; 定义了一个数组指针占8个字节空间指向20个字节的指针注意一维数组的数组名是指向数组第一个元素的指针常量sizeof运算时不能理解为int*型对一维数组时值不变类型升级为指向整个数组对数组指针取*运算时值不变类型降级为指向数组的第一个元素的指针5.二维数组传参1.二维数组传数组名和第一维长度int fun(int (*p)[3],int len)可以理解二维数组就是多个一维数组组成二维数组的数组名就是指向第一行的数组指针对a取*就是指向第一行第一列的指针再对a取*就是对第一行第一列的元素进行元素访问其次就是p[i]等价于*(pi)