const char gcszOnOff[][48] = {// 投入退出 { "退出" }, { "投入" } }; const char gcszLcdSynctmMode[][32] = {//LCD对时方式 {"主站"}, {"北斗GPS"} }; 用什么类型的指针可以同时指向gcszLcdSynctmMode和gcszOnOff
时间: 2023-07-23 22:23:06 浏览: 34
gcszOnOff和gcszLcdSynctmMode都是二维字符数组,但是它们的列数不同,因此它们的类型是不同的。不能使用相同的指针类型来同时指向它们。
可以使用void指针或者char指针来同时指向这两个数组。但是需要注意的是,使用这种方式时需要手动计算每一个元素的大小和数组的大小,因为编译器无法在编译时推断这些信息。例如:
```
void *ptr = NULL;
int i = 0;
ptr = gcszOnOff;
for (i = 0; i < sizeof(gcszOnOff)/sizeof(gcszOnOff[0]); ++i) {
printf("%s\n", (char *)ptr+i*48);
}
ptr = gcszLcdSynctmMode;
for (i = 0; i < sizeof(gcszLcdSynctmMode)/sizeof(gcszLcdSynctmMode[0]); ++i) {
printf("%s\n", (char *)ptr+i*32);
}
```
这段代码使用了void指针来同时指向gcszOnOff和gcszLcdSynctmMode数组。首先将ptr指向gcszOnOff数组,然后使用(char *)ptr+i*48计算出每一个元素的地址,并输出。然后将ptr指向gcszLcdSynctmMode数组,再次计算每一个元素的地址并输出。
相关问题
const char gcszOnOff[][] = {// 投入退出 { "退出" }}; 这样定义对吗
不对。在定义二维字符数组时,需要指定每个字符串的长度。正确的定义方式是:
```c++
const char gcszOnOff[][10] = {{"投入"}, {"退出"}};
```
其中,`[][10]`表示第一维长度未知,第二维长度为10。每个字符串都需要使用双引号括起来,且每行最后一个字符串后不需要加逗号。
const char gcszOnOff[][NEW_DEF_LEN] = {// 投入退出 { "退出" }, { "投入" } }; const char gcszLcdSynctmMode[][DEF_LEN] = {//LCD对时方式 {"主站"}, {"北斗GPS"} }; 用什么类型的指针可以同时指向gcszLcdSynctmMode和gcszOnOff
gcszOnOff和gcszLcdSynctmMode都是二维字符数组,它们的每一个元素都是一个字符数组,因此它们的类型是相同的。可以使用const char (*ptr)[NEW_DEF_LEN]类型的指针来同时指向gcszLcdSynctmMode和gcszOnOff数组,这个指针可以用来遍历这两个数组中的每一个字符串。例如:
```
const char (*ptr)[NEW_DEF_LEN] = NULL;
int i = 0;
ptr = gcszOnOff;
for (i = 0; i < sizeof(gcszOnOff)/sizeof(gcszOnOff[0]); ++i) {
printf("%s\n", *(ptr+i));
}
ptr = gcszLcdSynctmMode;
for (i = 0; i < sizeof(gcszLcdSynctmMode)/sizeof(gcszLcdSynctmMode[0]); ++i) {
printf("%s\n", *(ptr+i));
}
```
这段代码会分别输出gcszOnOff和gcszLcdSynctmMode数组中的所有字符串。