为什么我不能将真实[0]分配给x的地址

时间:2014-12-24 19:02:19

标签: c

当我将char*更改为char**代码时,我无法理解为什么我无法将real[0]分配给某个地址。

当我分配10*sizeof(char)内存时,这是否意味着我可以real[0]使用real[9]

我理解char** real - 使用后如下

char** real = malloc(sizeof(char*) * 10);

这解决了这个问题。它分配了10个char*,因此我可以分配xy的地址,出于同样的原因char*,我无法分配地址,因为它只是为了字符?

最后,我想知道何时可以使用real[0]real[1]等等。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main(){

    char* real = malloc(sizeof(char) * 10);

    char x = 'a';
    char y = 'b';

    real[0] = &x;
    real[1] = &y;

    printf("%c %c\n",x,y);
    printf("%x\n",real[0]);
    printf("%x\n",real[1]);
    printf("%d\n",sizeof(&x));
    printf("%d\n",sizeof(&y));

    return 0;
}

2 个答案:

答案 0 :(得分:2)

realchar*,因此real[0]char。你可以做real[0] = x;。另外,如果您真的想要指向x,则需要realchar**并相应地处理分配。

答案 1 :(得分:2)

&x是指向char的指针。

由于realchar *(也就是指向char的指针),real[0]是char,而不是指向char的指针。 (real[0]*(real+0)相同,这意味着将取消引用指针以获取char。)

如果要在&x中存储real,则需要将其声明为char **,这意味着它是指向char的指针。然后,当你取消引用它时,你会得到一个指向char的指针,这就是&x

您确实可以real[0]使用real[9],但请注意,如果您将real声明为char **,则real[0]声明为real[9]将成为char(或char的地址)的指针。如果要在外部函数中更改其值,则可能很有用。