char* arr[][3]={ {"北京","沈阳","哈尔滨"}, {"北京","张家口"}, {"北京","石家庄","武汉"} };char **p=arr[0];
时间: 2023-07-06 19:36:51 浏览: 101
这段代码定义了一个二维数组 `arr`,其中每个元素是一个指向 `char*` 类型的指针,数组共有 3 行 3 列,即总共有 9 个指针。每行表示一个字符串数组,每列表示该字符串数组中的一个元素。
接下来,将 `arr[0]` 赋值给 `char** p`,即将 `p` 指向 `arr` 的第一行,也就是指向了 `"北京"`、`"沈阳"`、`"哈尔滨"` 三个字符串的指针地址之一。
需要注意的是,该代码没有给出任何输出或者运算操作,因此没有明显的结果。
相关问题
struct Route { const char* r1[3]={"北京","沈阳","哈尔滨"}; const char* r2[2]={"北京","张家口"}; const char* r3[3]={"北京","石家庄","武汉"}; }; Route routes; const char *routes[3]={routes.r1,routes.r2,routes.r3};
这段代码有一些问题,主要在于 `const char *routes[3]` 这一行。在该行中,`routes` 被定义为一个指向 `const char*` 类型的数组,而在该数组的初始化中,却将 `routes.r1`、`routes.r2` 和 `routes.r3` 分别赋值给了 `routes` 数组中的三个元素。这样做是不正确的,因为 `routes.r1`、`routes.r2` 和 `routes.r3` 都是指向字符串数组的指针,而不是字符串指针。因此,应该将 `const char *routes[3]` 修改为 `const char **routes[3]`,即将数组元素的类型改为指向指针的指针。这样修改后的代码如下:
```
struct Route {
const char* r1[3] = { "北京", "沈阳", "哈尔滨" };
const char* r2[2] = { "北京", "张家口" };
const char* r3[3] = { "北京", "石家庄", "武汉" };
};
Route routes;
const char **routes_arr[3] = { routes.r1, routes.r2, routes.r3 };
```
这样修改后,`routes_arr` 就是一个指向指针的指针数组,其中每个元素都指向一个字符串数组。
char* arr[][3]={{"北京","沈阳","哈尔滨"},{"北京","张家口"},{"北京","石家庄","武汉"}};部分初始化
`char* arr[][3] = {{"北京","沈阳","哈尔滨"},{"北京","张家口"},{"北京","石家庄","武汉"}};` 这个数组的初始化是部分初始化,只对前三个元素进行了初始化。
在这个数组中,共有 3 行 3 列,每个元素是一个指向 `char*` 类型的指针。用花括号 `{}` 括起来的一组元素表示一个行,因此这个数组可以看做是一个 3 行 3 列的矩阵,其中第一行的元素是 `{"北京","沈阳","哈尔滨"}`,第二行的元素是 `{"北京","张家口"}`,第三行的元素是 `{"北京","石家庄","武汉"}`。
需要注意的是,在这个初始化方式中,未被显式初始化的元素会被默认初始化为 0,对于 `char*` 类型的指针来说,就是指向空地址的指针。因此,如果使用了这种初始化方式,未被初始化的元素将会是空指针。
例如,可以将数组的第二行第三列的元素初始化为空指针,如下所示:
```
char* arr[][3] = {{"北京","沈阳","哈尔滨"},{"北京","张家口",0},{"北京","石家庄","武汉"}};
```
这样,数组的第二行第三列的元素就会被初始化为空指针。
阅读全文