C语言从头学32——字符串数组

发布于:2024-07-11 ⋅ 阅读:(45) ⋅ 点赞:(0)

关于字符串数组的声明方式,介绍两种:
1、二维数组方式
       如果一个数组的每个成员本身也是字符串,那就需要通过二维的字符数组来表示。每个字符串本身是一个字符数组,多个字符串再组成一个数组。如下例:
       char num[10][6]={"one","two","three","four","five","six","seven","eight","nine","ten"};
       上面的字符串数组包括包括10个成员,故一维声明为10,由于编译器可以自行计算一维 (可看做行) 成员个数,故10可以不写。10个成员中,字母最多的成员是"three"和"seven"都是5个字母再加上结尾"\0"是6,故二维 (可看做列) 声明为6。
2、char* 型一维数组方式
       数组的维度同二维数组的一维维度概念一致,都是相当于 "行" 的概念,行尾不涉及 "\0" 结束符;成员都是指针类型的字符串或者说是指向字符串的指针。行尾的 "\0" 编译器自动加上,不用我们考虑。这种声明方式形式简单一些,客观上也比前面的方式节省一些内存空间。把上例挪下来,可以这样声明:
       char* num[10]={"one","two","three","four","five","six","seven","eight","nine","ten"};
3、附上两种声明方式的字符串数组的遍历程序:
      a.二维数组方式

#include<stdio.h>
int main(void)
{
    char num[10][6] = { "one","two","three","four","five","six","seven","eight","nine","ten" };
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 6; j++)
        {
            char temp = num[i][j];
            if (temp != '\0')printf("%c",num[i][j]);
        }
        printf(" ");
    }
    printf("\n");
    getchar();
}

    运行结果:one two three four five six seven eight nine ten

    b.指针型一维数组方式

#include<stdio.h>
int main(void)
{
    const char* num[10] = { "one","two","three","four","five","six","seven","eight","nine","ten" };
    //由于编译器原因,这些10个指针都指向字符串常量,所以char*前面也要加上const。加上const后,指针指向的常量不可修改:
    //比如把"one"中的"o"改成"a"-> num[0][0]='a';编译器会报错。但若把指针指向另一个常量,是允许的,如num[0]="zero";可以。
    for (int i = 0; i < 10; i++)
    {
        printf("%s ", num[i]);
    }
    printf("\n");
    getchar();
}

   运行结果:one two three four five six seven eight nine ten