C++基础--指针--指针局部变量赋值的坑
指针局部变量赋值的坑
输出结果为空,并非helloworld
其主要原因为:传递指针 后,指针的赋值与传统变量不相同,在函数中,局部变量指针给原指针的赋值很可能出现问题。
#include <iostream>
#include <cstring>
#include <malloc.h>
using namespace std;
char* test2();
void allocatespace(char* pp);
int main() {
test2();
}
void allocatespace(char *pp) {
char* temp = (char*)malloc(100);
memset(temp, 0, 100);
strcpy(temp, "helloworld");
pp = temp;
}
char* test2() {
char *p = NULL;
allocatespace(p);
}
从内存分布图可以看出,pp的值并没有传递给p,p指针依旧为NULL
解决方案:使用二级指针,修改代码如下:
1.修改allocatespace(char* pp); 为void allocatespace(char** pp);
2.修改test2(),向allocatespace传递p指针的地址
3.allocatespace种 pp = temp;变为*pp = temp;
#include <iostream>
#include <cstring>
#include <malloc.h>
using namespace std;
char* test2();
void allocatespace(char** pp);
int main() {
test2();
}
void allocatespace(char **pp) {
char* temp = (char*)malloc(100);
memset(temp, 0, 100);
strcpy(temp, "helloworld");
*pp = temp;
}
char* test2() {
char *p = NULL;
allocatespace(&p);
}
地址描述如下:
少乱用指针