鱼C论坛

 找回密码
 立即注册
查看: 1184|回复: 15

[学习笔记] 二维数组的有关问题

[复制链接]
发表于 2024-2-28 23:25:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. #define NUM 5

  3. int main()
  4. {
  5.         char slogans[NUM][100] = {
  6.                 "I love FishC.com!",
  7.                 "Keep moving!",
  8.                 "Impossible is nothing!",
  9.                 "Just do it!",
  10.                 "I am what I am!"};
  11.         int i;

  12.         for (i = 0; i < NUM; i++)
  13.         {
  14.                 printf("%s\n", slogans[i]);
  15.         }

  16.         return 0;
  17. }
复制代码

对于第7行代码,其中slogans[0][2]和slogans[0][98]是什么字符呀?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-2-28 23:25:57 | 显示全部楼层
在你的代码中,第7行的声明使用了错误的语法。如果你想要定义一个二维字符数组来存储多个字符串,你可以这样做:

  1. #include <stdio.h>

  2. #define NUM 5
  3. #define MAX_LEN 20

  4. int main()
  5. {
  6.     char slogans[NUM][MAX_LEN] = {
  7.         "I love FishC.com!",
  8.         "Keep moving!",
  9.         "Impossible is nothing!",
  10.         "Just do it!",
  11.         "I am what I am!"
  12.     };
  13.     int i;

  14.     for (i = 0; i < NUM; i++)
  15.     {
  16.         printf("%s\n", slogans[i]);
  17.     }

  18.     return 0;
  19. }
复制代码


在这个例子中,`char slogans[NUM][MAX_LEN]`声明了一个大小为NUM行、MAX_LEN列的二维字符数组。每行可以存储一个最大长度为MAX_LEN的字符串。然后,在大括号内,我们使用逗号分隔不同的字符串,最后用分号结束。

接下来,在for循环中,我们通过`slogans[i]`来访问数组中的每个字符串,并使用`printf`函数将其打印出来。

希望这能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-28 23:28:18 | 显示全部楼层
FishC 发表于 2024-2-28 23:25
在你的代码中,第7行的声明使用了错误的语法。如果你想要定义一个二维字符数组来存储多个字符串,你可以这 ...

在你的代码中,第8行定义的二维数组中,slogans[0][2]和slogans[0][98]对应的是什么字符呀?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-28 23:28:39 | 显示全部楼层
GuHx 发表于 2024-02-28 23:28
在你的代码中,第8行定义的二维数组中,slogans和slog ...


非常抱歉,我之前的回答中有个错误。第8行声明二维字符数组时,应该使用`char slogans[NUM][MAX_LEN]`而不是`char slogans`。其中,`slogans`表示二维字符数组的名称,`NUM`表示数组的行数,`MAX_LEN`表示数组每行的最大长度。

这样定义了一个名为`slogans`的二维字符数组,它有NUM行和MAX_LEN列。每一行可以存储一个最大长度为MAX_LEN的字符串。

现在来看看修正后的代码:

#include
#define NUM 5
#define MAX_LEN 20

int main(){
    char slogans[NUM][MAX_LEN] = {
        "I love FishC.com!",
        "Keep moving!",
        "Impossible is nothing!",
        "Just do it!",
        "I am what I am!"
    };

    int i;

    for (i = 0; i < NUM; i++){
        printf("%s\n", slogans[i]);
    }

    return 0;
}

在这个例子中,我们在第8行将`slogans`定义为一个二维字符数组,用于存储多个字符串。每一行代表一个字符串,通过索引`i`来遍历输出每个字符串。

希望这次能够解决你的问题,并对之前给出错误答案所产生的困扰表示诚挚的道歉。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-28 23:58:59 | 显示全部楼层
FishC 发表于 2024-2-28 23:28
非常抱歉,我之前的回答中有个错误。第8行声明二维字符数组时,应该使用`char slogans[NUM][MAX_LEN]` ...

还有1个问题:
如何获取二维数组 a 的长度?
答案:sizeof(a) / sizeof(a[0][0]),这是最好的方法,没有之一。

请问答案分母是什么意思?为什么要除这个分母?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-28 23:59:19 | 显示全部楼层
GuHx 发表于 2024-02-28 23:58
还有1个问题:
如何获取二维数组 a 的长度?
答案: ...


非常抱歉,您的答案中有误。

要获取二维数组 `a` 的长度,正确的方法是使用以下公式:`sizeof(a) / sizeof(a[0])`。其中,分子 `sizeof(a)` 表示整个二维数组 `a` 的大小(以字节为单位),分母 `sizeof(a[0])` 表示每行的大小(以字节为单位)。

将分子除以分母的目的是为了获得行数。因为二维数组在内存中是按照连续的行存储的,所以整个二维数组的大小除以每行的大小就可以得到行数。

具体来说,`sizeof(a)` 是整个二维数组的总大小,`sizeof(a[0])` 是第一行的大小。通过将它们相除,我们可以得到二维数组中的行数。

请注意,这个方法只适用于静态数组,即在编译时已知大小的数组。对于动态分配的数组,我们需要使用其他方法来获取行数。

希望这能解决您的疑问!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-29 00:11:17 | 显示全部楼层
FishC 发表于 2024-2-28 23:59
非常抱歉,您的答案中有误。

要获取二维数组 `a` 的长度,正确的方法是使用以下公式:`sizeof(a) /  ...

如果不除,只取分子为结果,结果对吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-29 00:12:28 | 显示全部楼层
GuHx 发表于 2024-2-29 00:11
如果不除,只取分子为结果,结果对吗

@FishC
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-29 00:12:32 | 显示全部楼层
GuHx 发表于 2024-02-29 00:11
如果不除,只取分子为结果,结果对吗


如果只取分子 `sizeof(a)` 作为结果,将会得到整个二维数组的大小(以字节为单位),而不是行数。这是因为 `sizeof(a)` 表示整个数组的大小,包括所有的行和列,而不仅仅是某一行的大小。如果你只关心行数,应该将 `sizeof(a)` 除以 `sizeof(a[0])` 来获取行数。具体来说,`sizeof(a)` 是整个二维数组的总大小,`sizeof(a[0])` 是第一行的大小。通过将它们相除,我们可以得到二维数组中的行数。所以,正确的获取二维数组行数的方法是 `sizeof(a) / sizeof(a[0])`。希望这能解决您的疑问!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-29 00:12:47 | 显示全部楼层


你好!有什么问题我可以帮助你解答呢?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-29 00:14:55 | 显示全部楼层
FishC 发表于 2024-2-29 00:12
如果只取分子 `sizeof(a)` 作为结果,将会得到整个二维数组的大小(以字节为单位),而不是行数。这是 ...

如果是获取二维数组的长度呢,只用分子行不行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-29 00:15:07 | 显示全部楼层
GuHx 发表于 2024-02-29 00:14
如果是获取二维数组的长度呢,只用分子行不行?


如果你想获取二维数组的行数,只用分子是可以的。因为在C语言中,二维数组的行数是在编译时确定的,并且在内存中是连续存储的。

所以,可以使用以下方式来获取二维数组的行数:
  1. int rows = sizeof(a) / sizeof(a[0]);
复制代码

这里的`sizeof(a)`表示整个二维数组的大小(以字节为单位),`sizeof(a[0])`表示第一行的大小。通过将它们相除,我们可以得到二维数组的行数。

注意,这种方法前提是二维数组是静态分配的,即在声明时就给定了固定的行数。如果是动态分配的二维数组,这种方法将不再适用。

希望能帮到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-29 00:16:19 | 显示全部楼层
FishC 发表于 2024-2-29 00:15
如果你想获取二维数组的行数,只用分子是可以的。因为在C语言中,二维数组的行数是在编译时确定的,并 ...

不是行数,我问的是长度
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-29 00:16:31 | 显示全部楼层
GuHx 发表于 2024-02-29 00:16
不是行数,我问的是长度


抱歉,我之前理解错了。如果你想要获取二维数组的长度(即列数),可以使用以下方式:

  1. int cols = sizeof(a[0]) / sizeof(a[0][0]);
复制代码


这里的`sizeof(a[0])`表示第一行的大小(以字节为单位),`sizeof(a[0][0])`表示每个元素的大小(以字节为单位)。通过将它们相除,我们可以得到二维数组的列数。

请注意,这种方法仅适用于静态分配的二维数组,在编译时已经确定了行数和列数。对于动态分配的二维数组,我们需要单独保存行数和列数的变量。

希望能够满足你的需求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-29 12:35:40 | 显示全部楼层
FishC 发表于 2024-2-29 00:16
抱歉,我之前理解错了。如果你想要获取二维数组的长度(即列数),可以使用以下方式:
  1. int C[2][2] ={};
复制代码

还有一个新问题,二维数组可以这样定义,然后使其中的元素都为0吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-29 12:35:53 | 显示全部楼层
GuHx 发表于 2024-02-29 12:35
int C ={};

还有一个新问题,二维数组可以这样定义 ...


对于C语言中的二维数组,可以使用以下方式将所有元素初始化为0:

int C[行数][列数] = {0};

这样会将二维数组C的所有元素都初始化为0。请确保提前知道二维数组的行数和列数,并将它们替换为实际的值。

例如,如果你想要创建一个3行4列的二维数组,并将所有元素都初始化为0,可以这样写:

int C[3][4] = {0};

这样声明和初始化的二维数组C中的所有元素都将被设置为0。

希望能够解决你的疑问!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表