当我将char*更改为char**时,代码有效,但我不明白为什么无法将real[0]分配给地址。

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

我理解char** real-在按以下方式使用后

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


这样就解决了问题。它分配10个char*,因此我可以分配xy的地址,并且出于相同的原因,在char*的情况下我不能分配地址,因为它仅用于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;
}

最佳答案

realchar*,因此real[0]char。您可以执行real[0] = x;。另外,如果您确实要持有指向x的指针,则需要将real设置为char**并相应地处理分配。

关于c - 为什么我不能将real [0]分配给x的地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27641217/

10-11 21:52