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

他们都一样吗?如果不同,请解释它以什么方式以及如何存储在内存中?

4

2 回答 2

3

它们在记忆中是一样的。在 VS 2010 调试器中,我转换为 char*,以便检查 p 和 s 的前 18 个原始字节: Visual Studio 中程序的屏幕截图

于 2013-06-02T03:06:48.390 回答
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
于 2013-06-02T02:36:58.993 回答