当我将char*
更改为char**
代码时,我无法理解为什么我无法将real[0]
分配给某个地址。
当我分配10*sizeof(char)
内存时,这是否意味着我可以real[0]
使用real[9]
?
我理解char** real
- 使用后如下
char** real = malloc(sizeof(char*) * 10);
这解决了这个问题。它分配了10个char*
,因此我可以分配x
和y
的地址,出于同样的原因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;
}
答案 0 :(得分:2)
real
是char*
,因此real[0]
是char
。你可以做real[0] = x;
。另外,如果您真的想要指向x
,则需要real
为char**
并相应地处理分配。
答案 1 :(得分:2)
&x
是指向char的指针。
由于real
是char *
(也就是指向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的地址)的指针。如果要在外部函数中更改其值,则可能很有用。