Char数组基础知识c

时间:2013-06-02 02:09:40

标签: c arrays string

char p[3][6]={{'a','b','c','\0'},{'d','e','f','\0'},{'g','h','i','\0'}};
char s[3][6]={"abc","def","ghi"};

他们俩都一样吗?如果不同,请说明它在内存中的存储方式和方式?

2 个答案:

答案 0 :(得分:3)

他们在记忆中是一样的。在VS 2010调试器中,我转换为char *,因此我可以检查p和s的前18个原始字节: screenshot of program in Visual Studio

答案 1 :(得分:2)

在两种方法中都有无差异,请尝试以下代码并查看结果
变量p和s的结果相同。

  • 在第一个定义中,您使用单引号以字符数组的形式提供了字符串。
  • 在第二个定义中,您提供了双引号的直接字符串 - 两者相同

  #include<stdio.h>
    void main()
    {
        int i,j=0;
        char p[3][6]={{'a','b','c','\0'},{'d','e','f','\0'},{'g','h','i','\0'}};
        char s[3][6]={"abc","def","ghi"};
        for(i=0;i<3;i++)
        {
            printf("%s",p[i]);
            printf("\n");
        }
        for(i=0;i<3;i++)
        {
            printf("%s",s[i]);
            printf("\n");
        }
    }

结果如下:

First 2-d string is : abc        def     ghi
Second 2-d string is :abc        def     ghi