关于二级指针的问题,求助!

2608 2002-12-26 10:02:48
我在主程序中定义了 char *buffer,在函数想要对这个指针所指向的区域进行修改(指针未初始化)
我该怎么做呢?
比如:

void changebuffer(char **)

main()
{

char *buufer;

changebuffer(&buffer);
}

void changebuffer(char **Buffer)
{
**buffer=malloc(size); /* 这里应该使用 *buffer 或是 **buffer ,或是其他? */
}




...全文
133 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
luixui 2002-12-27
  • 打赏
  • 举报
回复
*buffer
gxynctz 2002-12-27
  • 打赏
  • 举报
回复
Void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}

void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
俞庆平 2002-12-27
  • 打赏
  • 举报
回复
//看来我的错误不少,更改如下,请见谅。
bool changebuffer(char *&Buffer,int size = 1024)
{//注:取引用,取默认值,c语言好像不支持,用C++用久了,忘记了。
if(Buffer != NULL) free(Buffer);
Buffer = (char *)malloc(size);
if(Buffer) return true;
return false;
}
main()
{
char *buffer = NULL;
if(changebuffer(buffer))
free(buffer);
}
方案二:
bool changebuffer(char **Buffer,int size = 1024)
{
if(*Buffer != NULL) free(*Buffer);
*Buffer = (char *)malloc(size);
if(*Buffer) return true;
return false;
}
main()
{
char *buffer = NULL;
if(changebuffer(buffer))
free(buffer);
}
方案三:
char * changebuffer(int size = 1024)
{
return (char *)malloc(size);
}
main()
{
char *buffer = NULL;
if(buffer != NULL) free(buffer);
buffer = changebuffer();
if(buffer!=NULL)
free(buffer);
}
俞庆平 2002-12-27
  • 打赏
  • 举报
回复
说着说着,自己忘记了返回值,呵呵,
注意返回值哦。
因为你不能保证每次malloc都会成功。
俞庆平 2002-12-27
  • 打赏
  • 举报
回复
//楼主这段代码有些许漏洞,首先char * buffer定义时请赋空,
//char * buffer = NULL;这样可以避免函数changebuffer无法
//确认buffer是否为空。
//其次是changebuffer()函数应有返回值,例如;
//如果成功返回true,失败返回false
//还有changebuffer()分配的空间大小无法从外界来控制。
//最后分配的空间要释放。
//修改意见如下:
方案一:
void changebuffer(char *&Buffer,int size = 1024)
{//注:取引用,取默认值,c语言好像不支持,用C++用久了,忘记了。
if(Buffer != NULL) free(Buffer);
Buffer = (char *)malloc(size);
}
main()
{
char *buffer = NULL;
changebuffer(buffer);
free(buffer);
}
方案二:
void changebuffer(char **Buffer,int size = 1024)
{
if(*Buffer != NULL) free(*Buffer);
*Buffer = (char *)malloc(size);
}
main()
{
char *buffer = NULL;
changebuffer(&buffer);
free(buffer);
}
方案三:
char * changebuffer(int size = 1024)
{
if(*Buffer != NULL) free(*Buffer);
*Buffer = (char *)malloc(size);
}
main()
{
char *buffer = NULL;
if(buffer != NULL) free(buffer);
buffer = changebuffer();
free(buffer);
}
//以上三种方案均可以达到任务。
//楼主之所以对方案二中用*Buffer或**Buffer表示困惑,
//是因为对二级指针有些困惑所致
//显然char * buffer;这个buffer指针的值应当是由
//changebuffer分配出来的空间的地址。
//而char **Buffer中的Buffer是指向指针的指针,
//*Buffer是个指针,而Buffer中存放的是上面定义的
//buffer的地址,所以*Buffer就相当于buffer
//所以你想得到buffer = (char *)malloc(size);
//显然是用*Buffer = (char *)malloc(size);
wangbing_eternal 2002-12-26
  • 打赏
  • 举报
回复
楼上说的对。
不过不知是不是楼主笔误,还是别的原因,我认为你若想改变指针变量buffer所指向的内存单元,可以这样写:
void changebuffer(char **)

main()
{

char *buffer;

changebuffer(&buffer);
}

void changebuffer(char **Buffer)
{
*Buffer=malloc(sizeof(int)); /* 这里应该使用 *Buffer */
}


boyfling 2002-12-26
  • 打赏
  • 举报
回复
你如果只是对指针指向的内容做修改 那么你的函数根本就不需要二级指针
如果是对指针本身做修改 那才用二级指针
winco 2002-12-26
  • 打赏
  • 举报
回复
*buffer
HaiFen 2002-12-26
  • 打赏
  • 举报
回复
void changebuffer(char **)

main()
{
char *buffer;
changebuffer(&buffer);
printf("buffer:%s", buffer);
}

void changebuffer(char **Buffer)
{
int len = strlen("...");
*buffer = (char *)malloc(len+1);
strcpy(*buffer, "...");
}
artman 2002-12-26
  • 打赏
  • 举报
回复
*buffer
hongfeeling 2002-12-26
  • 打赏
  • 举报
回复
*buffer 是原指针
应该用*buffer吧

70,031

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧