我没有明确的想法如何以下两件代码显示不同的行为:这个c代码中的这个奇怪的行为是什么?
代码:
#include <stdio.h>
void set(char** addr) {
char* str = "testa";
*addr = str;
}
void _set(char*** addr) {
char* arr[] = {"testb"};
*addr = arr;
}
int main() {
char* a;
set(&a);
printf("'%s'\n", a);
printf("'%s'\n", a);
char** b;
_set(&b);
printf("'%s'\n",b[0]);
printf("'%s'\n",b[0]);
}
输出:
testa
testa
testb
testb
当我删除第一位的testa部分,代码是:
void _set(char*** addr) {
char* arr[] = {"testb"};
*addr = arr;
}
int main() {
char** b;
_set(&b);
printf("'%s'\n",b[0]);
printf("'%s'\n",b[0]);
}
输出:
'testb'
'UH▒▒AWE1▒AVAUATSH▒▒8▒E▒'
你回国(而不是返回值而是通过参数)一个指向局部变量的指针。这足以将周围的一切都考虑在内......未定义的行为。 –
我建议你阅读一本很好的C书,并且好好思考一下究竟是什么指针。考虑变量的生命周期。 – orlp