C语言指针与动态内存分配全解析
1. 指针与多维数组
在C语言里,指针和多维数组的结合使用十分关键。当使用像 board
这样的二维数组名时,它本质上是一个 char**
类型的地址值。对 board
进行解引用操作,会得到同样的地址,但类型变为 char*
。给这个地址加上 i
,会得到一个新的 char*
类型地址,它指向数组中偏移 i
个元素的位置,再对这个新地址解引用,就能得到该位置的内存内容。
下面是一个示例代码,展示了如何使用指针访问二维数组:
#include <stdio.h>
int main(void)
{
char board[3][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
char *pboard = *board; // A pointer to char
for(int i = 0 ; i < 9 ; ++i)
printf(" board: %c\n", *(pboard + i));
return 0;
}
这里, pboard
被初始化为数组首元素的地址,然后通过指针算术运算遍历数组。需要注意的是,