读书人

void test(char* p) //笔考试题为什么

发布时间: 2013-07-04 11:45:33 作者: rapoo

void test(char* p) //笔试题为什么这里必须是char** p来接受一级指针呢??????
void test(char* p) //笔考试题为什么这里必须是char* p来接受一级指针呢?



#include "stdafx.h"
//#include ""
void test(char* p) //笔试题为什么这里必须是char** p来接受一级指针呢??????
{
* p = 'b';
printf("%c ",p[0]);
//这不一级指针也能接受一级指针的地址;可以删除、改变其内容并重新申请空间吗????
delete[] p;
p = NULL;
p = new char[100+1];
char m[100];
for(int i=0;i<99;i++)
m[i] = 'a';
memcpy(p,m,100);
}


int _tmain(int argc, _TCHAR* argv[])
{
char * p = new char[100+1];
char m[100];
for(int i=0;i<99;i++)
m[i] = 'a';
memcpy(p,m,100);
*(p + 100) = '\0';
test(p);
printf("%c \n",p[0]);
return 0;
}

[解决办法]
一级指针也能接受一级指针的地址;可以删除、改变其内容并重新申请空间吗????

可以改变其内容,但不可改变其地址,重新申请的空间无法传递回去。

想要通过参数来修改调用者的char或char数组数据,需要char *类型
想要通过参数来修改调用者的char*或char*数组数据,需要char ** 类型。

*(p + 100) = '\0';
test(p);
printf("%c \n",p[0]);//错误!
//p所指向的内存块已经被释放了
//test中新分配了内存,但新内存块的地址没有传出来
//p依然指向被释放的那块内存块。

[解决办法]
请理解: 传值(拷贝,副本)

读书人网 >C++

热点推荐