C动态分配内存
本帖最后由 ing 于 2020-3-7 21:21 编辑为什么指针变量 a 需要动态分配内存,temp 却不需要?
如果我不为指针 a 分配内存,那么将会导致异常的发生
uninitialized local variable 'a' used
本帖最后由 你与明日 于 2020-3-7 20:41 编辑
char **a =nullptr;//能编译通过,但不会分配内存给你,指针类型的数据都是需要给他一个内存地址
temp的内存地址是来自char **a malloc是在堆中申请空间,char** a是指向申请的空间的首地址,char** temp同样也是个指针,指向访问地址。
也就是说a是用于读写申请空间的,你给他换个别的名字也一样,只要有空间就可以往里面放数据 这样能编译通过? 2级指针怎么能直接分配值
const char **a = (const char**)malloc(3 * sizeof(const char*));
int n = 3;
a = "qwer";
a = "asdf";
a = "zxcv";
for (int i = 1; i < n; i++)
{
for (int j = 1; j < n; j++)
{
if (a < a)
{
const char *temp = a;
a = a;
a = temp;
}
}
} temp只是一个指针,这个指针编译的时候就已经在堆栈中存着了,他只是一个指向其他变量的指针,你分配内存返回的也是指针,声明指针变量编译器给你管理的,不要跟手动申请的内存空间混淆 干嘛用二级指针, 弄的复杂. 看提示,好像是a地址是不定的.因为a内存有编译器为其分配地址, 而a即a内存没有存放任何a信息. 古月不傲 发表于 2020-3-7 20:58
这样能编译通过? 2级指针怎么能直接分配值
const char **a = (const char**)malloc ...
感谢提醒,但确实可以编译运行,不过为什么这里 malloc(3 * sizeof(const char*));
可以存储"qwer"4个字符
a = "q";
a = "w";
a = "e";
a = "r";
他不是类似这样的吗
a 你是怎么编译通过的, char** a 被(char * ) 赋值.第一个连编译都不用,就提示你不行. ing 发表于 2020-3-7 21:30
感谢提醒,但确实可以编译运行,不过为什么这里 malloc(3 * sizeof(const char*));
可以存储"qwer"4个 ...
const char **a = (const char**)malloc(3 * sizeof(const char*));
a的地址 假设 = 0x0142D2E8
0x0142D2E8:48 9b 54 00 50 9b 54 00 58 9b 54 00
a = 0x00549b48:qwer....
a = 0x00549b50:asdf....
a = 0x00549b58:zxcv....
页:
[1]