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的指针分配内存 ".有人能解释一下这意味着什么吗?
这是一个有点神秘的回应,但我想投诉是阵列a没有指向那个数据; 它包含数据.
所以这可能是需要的(没有指针箭头):
____________
a |a|b|c|d|e|\0|
¨¨¨¨¨¨¨¨¨¨¨¨
Run Code Online (Sandbox Code Playgroud)
数组的名称可以用作指针,但它仍然具有微妙的不同含义.
我会像这样画它们:
____________
|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是一个包含字符串本身的整个数组,而不仅仅是一个指针.这表明您意识到数组和指针之间的区别.