【问题标题】:Arrays with several sentences in CC中包含多个句子的数组
【发布时间】:2015-09-13 10:56:17
【问题描述】:

我该怎么做?在 Swift 2 中,我会这样做:

let test = [
    "I'm a sentence.",
    "Me too.",
    "What am I?",
    "I'm whatever"
]

print(test[1])

我如何在 C 中做同样的事情?

我尝试了以下方法:

#include <stdio.h>
#include <string.h>

int main()
{
 const char strings[] = {
        "I'm a sentence.",
        "Me too.",
        "What am I?",
        "I'm whatever"
  };
  printf("%s", strings[1]);
  return 0;
}

【问题讨论】:

  • char strings[] 可以在数组中存储一个句子。 * 可以在数组中存储无限数量的字符串,因为它是一个 char* 数组。
  • @Olaf 即使他不明白* 的用途,他现在也会阅读它。他可能读过书并制作了一些程序,但有时他所学的东西会让他失望,需要一点推动才能让他走上正确的道路。
  • @Nasr 谢谢!我现在学习 C 大约有两个星期了,所以当然不是我所做的每件事都能成功。

标签: c arrays swift swift2


【解决方案1】:

示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  const char *strings[] = {
        "I'm a sentence.",
        "Me too.",
        "What am I?",
        "I'm whatever"
  };
  printf("strings[1]: %s\n", strings[1]);
  return 0;
}

输出

$ ./test 
strings[1]: Me too.

【讨论】:

  • 谢谢,这就是我想要的。我的解决方案完全正确,只是我错过了strings 之前的*。为什么我必须把* 放在那里?
  • 因为成员字符串的大小不统一。因此我们正在初始化一个指向字符串字面量内存的指针数组(已知长度)(已知大小)
  • @S.Eberl 如果没有*stringschar 的数组,这意味着它可以容纳一个字符串。对于*stringschar* 的数组,这意味着它可以存储无限 数量的字符串(字符串文字,char*s)
【解决方案2】:

好吧...所以首先,了解这里发生了什么:

"me too" 本身就是一个字符数组,因此您输入的每个句子也是如此。 此外,char* 指向句子中的第一个字符。

您的问题: 您没有创建一个包含所有句子的数组(又名指向每个句子的每个第一个字符),而是定义了 char strings[] 这是一个字符数组,AKA 仅指向一个句子(char*,记得吗? )

但是,您应该声明一个 char* 数组,这样您将拥有:

                 'o' <- 0X6
                 'o' <- 0X5
                 't' <- 0X4
                 ' ' <- 0X3
                 'e' <- 0X2
                 'm' <- 0X1
                  ^
                  |  . . .
                ----------------
char* arr[]:    | 0x1 |   |   |
                ----------------

【讨论】:

  • 我还是不明白。如果我声明char strings[] 我有一个数组,我可以在其中存储Me toochar strings[] = {"Me too"};。如果我想在其中存储第二个句子,为什么我需要一个指针而不是像 char strings[][] = ..... 这样的东西?
  • 对于每个新句子,您需要一个 char*,因此,您需要一个 char* 数组。经验法则:每个[] 表示一个指针 => char[][] arr = char* arr[] = char** arr
  • 那么:char* strings[] 应该和char strings[][] 一样吗?因为第二个版本不行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2021-12-21
  • 2021-02-09
相关资源
最近更新 更多