首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-07-04 
void test(char* p) //笔试题为什么这里必须是char** p来接受一级指针呢??????#include stdafx.h//#incl

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依然指向被释放的那块内存块。

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

热点排行