C语言里的指针探析——type *name[] 在函数参数里面,是一个二维指针
type *name[] 在函数参数里面声明和不在函数里面声明其实不一样。
type *name[] 如果在函数参数里声明,则name 是一个二维指针,并不是一个指针数组,而如果不在函数参数里声明,则是一个指针数组。
这可以通过sizeof 来确认。
1 2 3 4 5 6 7 | void func( char *name[]) { printf ( "%d\n" , sizeof (name); } char *str[] = { " we" , "are" , "good\n" }; func(str); // 输出4 |
输出结果为4,从而可以知道name 一个指针,而不是数组,不然为什么sizeof 的结果不是指针数组的大小,也就是12( 4 *3)。
下图是我的理解示意图
二维指针与二维数组不一样,但是二维指针可以使用和二维数组一样的访问形式,即name[i][j]。
1 2 3 4 5 6 7 | int *num[3] = { 1, 3, 5}; *num++; // error void func( int *num[]) { *num++; // no error; } |
不能对数组名进行自增,因为数组名标志数组的开始地址,但是可以对二维指针进行自增,因为二维指针是一个指针变量。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步