关于空指针问题

wanghaoha 2012-10-27 09:20:16
这段程序为什么我把fn设置为VOID 类型了,在main()中打印c的时候结果还是会变化 求解答
最好可以把字符数组也分析一下
解释清楚了加分



#include<iostream.h>

void fn(char p[])
{
cout<<"in fn sizeof(p)="<<sizeof(p)<<endl;
p[0]='s';
}

void main()
{
char c[10]="abcdefgh";
cout<<"in main sizeof(c)="<<sizeof(c)<<endl;
fn(c);
cout<<c;

}

结果
in main sizeof(c)=10
in fn sizeof(p)=4
sbcd
Press any key to continue
...全文
86 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjain 2012-10-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 2 楼 的回复:
在我这里输出很正常。
我用的是mingw gcc`~
你用的是vc6?
你试试把
cout<<c;
改成
cout<<c<<endl;

试试`我怀疑是缓冲区没有输出完`~


不是这个问题 这是我把字符串内容变小了忘记改了的 不好意思 输出正常 就是不理解空函数,空函数不是不会返回值的吗 他怎么可以吧S返回到c[10]中
[/Quote]

没有返回值的函数不是不能改变外部,只是不需要返回值。
可以通过参数传出对内容做的改变。

现在很多人在写函数的时候,用返回值来确定是否执行成功,用参数做输入输出。
通过传入一个参数带出执行结果。
windows api好多都是,你看MSDN里,好多函数的定义,在参数前有
IN
OUT
的说明,就是指明这个参数是做传入还是传出用的。有的参数两者兼并。
你的函数参数就是即传入又传出了。
wanghaoha 2012-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
在我这里输出很正常。
我用的是mingw gcc`~
你用的是vc6?
你试试把
cout<<c;
改成
cout<<c<<endl;

试试`我怀疑是缓冲区没有输出完`~
[/Quote]

不是这个问题 这是我把字符串内容变小了忘记改了的 不好意思 输出正常 就是不理解空函数,空函数不是不会返回值的吗 他怎么可以吧S返回到c[10]中
wanghaoha 2012-10-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
C/C++ code


#include<iostream.h>

void fn(char p[]) //不需要返回值,等同于 void fn(char *p),数组和指针在做函数参数的时候是一样的,
//在做参数使用的时候,数组的作用相当于指针了。
{
cout<<"in fn sizeof(p)="<<sizeof(p)<<……
[/Quote]

p[0]='s';
这个怎么解释啊 这个怎么像是字符数组的第一个元素了 我将他变成 p[1]='s';之后输出的s也到字符串第二位了,他不是变成一个普通指针了吗

wjain 2012-10-27
  • 打赏
  • 举报
回复
在我这里输出很正常。
我用的是mingw gcc`~
你用的是vc6?
你试试把
cout<<c;
改成
cout<<c<<endl;

试试`我怀疑是缓冲区没有输出完`~
wjain 2012-10-27
  • 打赏
  • 举报
回复

#include<iostream.h>

void fn(char p[]) //不需要返回值,等同于 void fn(char *p),数组和指针在做函数参数的时候是一样的,
//在做参数使用的时候,数组的作用相当于指针了。
{
cout<<"in fn sizeof(p)="<<sizeof(p)<<endl; //sizeof(p) 计算的是指针占的空间
p[0]='s';
}

int main() // 返回一个int型变量
{
char c[10]="abcdefgh";
cout<<"in main sizeof(c)="<<sizeof(c)<<endl; //sizeof(c) 计算的是数组占的空间
fn(c);
cout<<c;

return 0;
}

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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