C分配指针?这是什么?

Pit*_*kos 8 c pointers memory-management char

我有以下代码.

char a[] = "abcde";
char *b = "fghij";
char *c = malloc(6);
char *d = c;
c = "klmno";
Run Code Online (Sandbox Code Playgroud)

演习陈述:

绘制数据结构a,b,c和d(带内容)的图片,您可以在其中查看已分配的内容并使用箭头显示指针的设置方式.

我的解决方案是:

      ____________
a -> |a|b|c|d|e|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ____________
b -> |f|g|h|i|j|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ____________
c -> |k|l|m|n|o|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ___________
d -> | | | | | | |
      ¨¨¨¨¨¨¨¨¨¨¨
Run Code Online (Sandbox Code Playgroud)

但是我的解决方案没有被接受,响应是" 为指向b,c,d而不是a的指针分配内存 ".有人能解释一下这意味着什么吗?

Gra*_*and 9

这是一个有点神秘的回应,但我想投诉是阵列a没有指向那个数据; 它包含数据.

所以这可能是需要的(没有指针箭头):

    ____________
a  |a|b|c|d|e|\0|
    ¨¨¨¨¨¨¨¨¨¨¨¨
Run Code Online (Sandbox Code Playgroud)

数组的名称可以用作指针,但它仍然具有微妙的不同含义.

  • 看起来他们想像[这个](http://c-faq.com/aryptr/aryptr2.html). (4认同)
  • 数组的名称指向该数组的第一个元素.从这个意义上讲,这是一个指针. (2认同)

Bla*_*iev 7

我会像这样画它们:

      ____________
     |a|b|c|d|e|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
           a
      ____________
b -> |f|g|h|i|j|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ____________
c -> |k|l|m|n|o|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      _____________
d -> |g|a|r|b|a|g|e|
      ¨¨¨¨¨¨¨¨¨¨¨¨¨
Run Code Online (Sandbox Code Playgroud)

注意它a是如何在整个数组下面,而不是在箭头旁边.这是为了强调这a是一个包含字符串本身的整个数组,而不仅仅是一个指针.这表明您意识到数组指针之间的区别.

  • @Andrey:不,不是.数组和指针之间有明显的区别.虽然数组标识符在某些上下文中衰减为指针,但这并不会使它们成为指针.尝试`sizeof(a)`和`sizeof(b)`,看看你自己的差异. (3认同)