鱼C论坛

 找回密码
 立即注册
查看: 3458|回复: 13

函数 字符串 传参

[复制链接]
发表于 2013-10-2 21:42:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
不知是不是脑袋短路了。。想不出下面的问题,请问应该怎么解释。。。
void da(char *a)
{
        *a = '1';
        printf("%d\n",&a);
}
void main()
{
        char a[] = "abcde";
        printf("%d\n",&a);
        da(a);
        printf("%s",a);
        system("pause");
}
得到结果:1374896   1374684   1bcde(前两个是地址,后一个是值)
从结果知道main里面的a和da函数中的a的地址是不相同的,我想是因为da函数为参数a重新分配了地址
问题:为什么main函数里面a的值也被修改了?

如果把da函数中*a = '1';改成a = "12345";
main中输出的a是"abcde";a的值没变。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-2 21:54:05 | 显示全部楼层
不管再哪个函数中指针指向的都是同一个物理地址
写a = XXX a 只是哪个da函数的变量 和main函数没关系
但是*a 是指向一个内存单元你修改了无论谁读取这内存的数据都是你修改后的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-2 22:02:49 | 显示全部楼层

谢谢解答,
请问为什么在main和da里面输出a的地址值是不同的呢?
还有*a='x'和a="xxx"的区别在哪?a是一个指针(应该没说错吧),那a="xxx"不是把xxx的地址赋值给了a吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-2 22:06:14 | 显示全部楼层
SXDA 发表于 2013-10-2 22:02
谢谢解答,
请问为什么在main和da里面输出a的地址值是不同的呢?
还有*a='x'和a="xxx"的区别在哪?a是一 ...

如果说函数结束后"xxx"的地址会被回收,那在main函数里面打印a的话是不是应该会出错?可是结果是a原来的值。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-2 22:10:25 | 显示全部楼层
我不会。。来学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-2 22:13:47 | 显示全部楼层
你是不是想这样???

void da(char *a)
{
        a =“1”;
        printf("%d\n",&a);
}
void main()
{
        char a[] = "abcde";
        printf("%d\n",&a);
        da(a);
        printf("%s",a);
        system("pause");
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-2 22:17:03 | 显示全部楼层
SXDA 发表于 2013-10-2 22:02
谢谢解答,
请问为什么在main和da里面输出a的地址值是不同的呢?
还有*a='x'和a="xxx"的区别在哪?a是一 ...

你已经在整指针了 这个函数的基本问题你不知道??
da函数的变量 和main函数的变量是完全没关系的只是发生了值得传递
比如定义函数void f(int i)
再main函数中写f(j)
f函数的i的值就是main函数中j的值
就相当于j = i 这两个是完全不同的变量
但是指针就不同了应为在两个函数中他们指向的是同一块内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-2 22:17:31 | 显示全部楼层
pzhccy 发表于 2013-10-2 22:13
你是不是想这样???

void da(char *a)

不是。。。我是不知道下面两个的区别
for(int i = 1;i <= strlen(a);i++)
        a[i] = i+'0';
和a="12345";

还有给函数传指针的原理,为什么主函数和被调用函数中的地址显示不同。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-2 22:21:35 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-10-2 22:17
你已经在整指针了 这个函数的基本问题你不知道??
da函数的变量 和main函数的变量是完全没关系的只是发 ...

谢谢,
这个我懂,我是郁闷为什么两次打印出来的地址值是不同的?他们不是应该指向同一地址吗?
还有能帮忙解释
a[0]='1';a[1]='2';a[2]='3';a[3]='4';a[4]='5';
和a="12345";   两者的区别吗?谢谢了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-2 22:24:09 | 显示全部楼层
a本身就是一个地址吧,你&a的话肯定是不同了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-2 22:26:42 | 显示全部楼层
codefu 发表于 2013-10-2 22:24
a本身就是一个地址吧,你&a的话肯定是不同了。

]。。。。难怪。。谢谢了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-2 22:30:00 | 显示全部楼层
codefu 发表于 2013-10-2 22:24
a本身就是一个地址吧,你&a的话肯定是不同了。

能帮忙解释
a[0]='1';a[1]='2';a[2]='3';a[3]='4';a[4]='5';
和a="12345";   两者的区别吗?谢谢了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-2 22:36:50 | 显示全部楼层
想明白了。。。da的a指针和main的a指针是不同的,但是都指向了同一地址,在da里面a="12345";是在静态区分配一个地址"12345"给a,而da函数结束后静态区回收,main的a还是原来的a。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-2 22:38:55 | 显示全部楼层
怎么结贴来的?????。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 04:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表