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);
}
地址描述如下:

少乱用指针
                    
                
                
            
        
浙公网安备 33010602011771号