SXDA 发表于 2013-10-2 21:42:48

函数 字符串 传参

不知是不是脑袋短路了。。想不出下面的问题,请问应该怎么解释。。。
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的值没变。。

牡丹花下死做鬼 发表于 2013-10-2 21:54:05

不管再哪个函数中指针指向的都是同一个物理地址
写a = XXX a 只是哪个da函数的变量 和main函数没关系
但是*a 是指向一个内存单元你修改了无论谁读取这内存的数据都是你修改后的

SXDA 发表于 2013-10-2 22:02:49

牡丹花下死做鬼 发表于 2013-10-2 21:54 static/image/common/back.gif
不管再哪个函数中指针指向的都是同一个物理地址
写a = XXX a 只是哪个da函数的变量 和main函数没关系
但是 ...

谢谢解答,
请问为什么在main和da里面输出a的地址值是不同的呢?
还有*a='x'和a="xxx"的区别在哪?a是一个指针(应该没说错吧),那a="xxx"不是把xxx的地址赋值给了a吗?

SXDA 发表于 2013-10-2 22:06:14

SXDA 发表于 2013-10-2 22:02 static/image/common/back.gif
谢谢解答,
请问为什么在main和da里面输出a的地址值是不同的呢?
还有*a='x'和a="xxx"的区别在哪?a是一 ...

如果说函数结束后"xxx"的地址会被回收,那在main函数里面打印a的话是不是应该会出错?可是结果是a原来的值。。。

御风 发表于 2013-10-2 22:10:25

我不会。。来学习

pzhccy 发表于 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");
}

牡丹花下死做鬼 发表于 2013-10-2 22:17:03

SXDA 发表于 2013-10-2 22:02 static/image/common/back.gif
谢谢解答,
请问为什么在main和da里面输出a的地址值是不同的呢?
还有*a='x'和a="xxx"的区别在哪?a是一 ...

你已经在整指针了 这个函数的基本问题你不知道??
da函数的变量 和main函数的变量是完全没关系的只是发生了值得传递
比如定义函数void f(int i)
再main函数中写f(j)
f函数的i的值就是main函数中j的值
就相当于j = i 这两个是完全不同的变量
但是指针就不同了应为在两个函数中他们指向的是同一块内存

SXDA 发表于 2013-10-2 22:17:31

pzhccy 发表于 2013-10-2 22:13 static/image/common/back.gif
你是不是想这样???

void da(char *a)


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

还有给函数传指针的原理,为什么主函数和被调用函数中的地址显示不同。。

SXDA 发表于 2013-10-2 22:21:35

牡丹花下死做鬼 发表于 2013-10-2 22:17 static/image/common/back.gif
你已经在整指针了 这个函数的基本问题你不知道??
da函数的变量 和main函数的变量是完全没关系的只是发 ...

谢谢,
这个我懂,我是郁闷为什么两次打印出来的地址值是不同的?他们不是应该指向同一地址吗?
还有能帮忙解释
a='1';a='2';a='3';a='4';a='5';
和a="12345";   两者的区别吗?谢谢了。

codefu 发表于 2013-10-2 22:24:09

a本身就是一个地址吧,你&a的话肯定是不同了。

SXDA 发表于 2013-10-2 22:26:42

codefu 发表于 2013-10-2 22:24 static/image/common/back.gif
a本身就是一个地址吧,你&a的话肯定是不同了。

{:5_99:}]。。。。难怪。。谢谢了。。。

SXDA 发表于 2013-10-2 22:30:00

codefu 发表于 2013-10-2 22:24 static/image/common/back.gif
a本身就是一个地址吧,你&a的话肯定是不同了。

能帮忙解释
a='1';a='2';a='3';a='4';a='5';
和a="12345";   两者的区别吗?谢谢了。

SXDA 发表于 2013-10-2 22:36:50

想明白了。。。da的a指针和main的a指针是不同的,但是都指向了同一地址,在da里面a="12345";是在静态区分配一个地址"12345"给a,而da函数结束后静态区回收,main的a还是原来的a。。。

SXDA 发表于 2013-10-2 22:38:55

怎么结贴来的?????。。。。。
页: [1]
查看完整版本: 函数 字符串 传参