func与func2都可以完成在函数内改变指针指向,它们的区别在那,2级指针不好理解。

dfczj 2007-06-08 02:20:50
#include <stdio.h>
#include <stdlib.h>

char* func(char **p)
{
*p="test";
return *p;
}


char* func2(char **p)
{
p="test";
return p;
}

int main()
{
char *a="abcdef";
printf("%s\n",func2(&a));
getchar();
return 0;
}

func与func2都可以完成在函数内改变指针指向,它们的区别在那,2级指针不好理解?
...全文
244 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyu2202863 2007-06-09
  • 打赏
  • 举报
回复
知向指针的指针...也就是说有个指针(暂且叫它1号),是指向另外一个指针(2号)的地址...那就可以同过1号指针来使用2号指针所知向的内容了
needallcodes 2007-06-09
  • 打赏
  • 举报
回复
void func(char *p); // 这种指针往往用于在函数内改变参数p指向内容(p所指的不是指针)
void func2(char **p);// 这种也是改变内容, 但内容是指针

当有:
char *a="test";
你用: func(a); //可以改变"test"这个串, 但a的值("test"地址)是无法改变的
而: func2(&a); //往往用来改变a的值, 这样a指向的就不一定是"test"了, 但你也可以用于完成func(a)的工作, 只是麻烦一点而已
YOUNG_Zi 2007-06-09
  • 打赏
  • 举报
回复
这个不需要返回啊
func(&a)->取了指针变量a的地址,即指针的指针
然后将指针变量a的值改变了,即指针变量a指向了"test"的内存空间首地址
验证方法:
1、在func(&a)运行前打印指针变量a的值,即printf( "%s\n" , a );
2、在func(&a)执行后再次打印指针变量a的值,前后两值不同
其实在执行后"abcdef"这个值还是存在于内存中的,只是没有办法在后续过程中打印出来

这个用VC编译看一下内存地址就清楚了:)
cmmouse 2007-06-08
  • 打赏
  • 举报
回复
没有返回,你想干什么啊?
dfczj 2007-06-08
  • 打赏
  • 举报
回复
晕死,楼上作废,应该是这样。
#include <stdio.h>
#include <stdlib.h>

void func(char **p)
{
*p="test";
}

int main()
{
char *a="abcdef";
func(&a);
printf("%s\n",a);
getchar();
return 0;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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