【问题标题】:what is the relation between these char str[10], char *str and char *str[10] in C?C中这些char str[10]、char *str和char *str[10]之间的关系是什么?
【发布时间】:2022-06-15 01:13:16
【问题描述】:

我可以将 *str[10] 视为二维数组吗? 如果我声明 char *str[10]={"ONE","TWO","THREE"} 我们如何访问单个字符?

【问题讨论】:

  • 您的标题似乎与您在问题中提出的不符。

标签: arrays c initialization declaration string-literals


【解决方案1】:

是的。 char* str[10] 将创建一个包含 10 个字符指针的数组。

要访问单个字符,我们可以像访问二维数组一样访问它。即

char* str[10]={"ONE","TWO","THREE"};
char first = str[0][0];

【讨论】:

    【解决方案2】:

    这条记录

    char str[10];
    

    是一个有10个char类型元素的数组的声明,例如你可以像这样初始化数组

    char str[10] = "ONE";
    

    这个初始化等价于

    char str[10] = { 'O', 'N', 'E', '\0' };
    

    数组中所有未显式初始化的元素都被初始化为零。

    你可以改变数组的元素,比如

    str[0] = 'o';
    

    strcpy( str, "TWO" );
    

    这条记录

    char *str;
    

    声明一个指向char 类型对象的指针。你可以像这样初始化它

    char *str = "ONE";
    

    在这种情况下,指针将由字符串字面量的第一个字符的地址初始化。

    这条记录

    char * str[10];
    

    是一个包含 10 个元素的数组的声明,其指针类型为 char *

    你可以像这样初始化它

    char * str[10] = { "ONE", "TWO", "THREE" };
    

    在这种情况下,数组的前三个元素将由明确指定的字符串文字的第一个字符的地址初始化。所有其他元素将被初始化为空指针。

    您不能更改数组元素指向的字符串字面量。任何更改字符串文字的尝试都会导致未定义的行为。

    要使用数组访问字符串文字的元素,您可以使用例如两个下标运算符。例如

    for ( sisze_t i = 0; str[0][i] != '\0'; ++i )
    {
        putchar( str[0][i] );
    }
    putchar( '\n' );
    

    如果你想改变字符串,那么你需要声明一个二维数组,例如

    char str[][10] = { "ONE", "TWO", "THREE" };
    

    在这种情况下,您可以更改数组的元素,这些元素又是一维数组,例如

    str[0][0] = 'o';
    

    strcpy( str[0], "FOUR" );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多