免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2655 | 回复: 3
打印 上一主题 下一主题

数组参数的地址和数组参数的第一个元素的地址竟然不一样 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-13 15:02 |只看该作者 |倒序浏览
C中数组参数的地址和数组参数的第一个元素的地址竟然不一样.但是事实就是如此.----------<<c专家编程>;>;.

  #include<stdio.h>;
   char ga[]="abcdefghijklm";
   void my_array_func(char ca[10])
   {
    printf("addr of array parm=%#x \n",&ca);
    printf("addr of (ca[0]) =%#x \n",&(ca[0]));
    printf("addr of (ca[1]) =%#x \n",&(ca[1]));
    printf(" ++ca = %#x \n\n",++ca);
    }
    void my_pointer_func(char *pa)
    {
     printf("addr of ptr parm=%#x\n",&pa);
     printf("addr of (pa[0]) =%#x \n",&(pa[0]));
    printf("addr of (pa[1]) =%#x \n",&(pa[1]));
    printf(" ++pa = %#x \n\n",++pa);
    }
    void main()
    {  printf("addr of global array =%#x\n",&ga);
       printf("addr of (ga[0]) =%#x \n",&(ga[0]));
       printf("addr of (ga[1]) =%#x \n",&(ga[1]));
       my_array_func(ga) ;
        my_pointer_func(ga);

        }

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2005-04-13 15:14 |只看该作者

数组参数的地址和数组参数的第一个元素的地址竟然不一样

靠。变量和变量里边的东西当然不一样了。

论坛徽章:
0
3 [报告]
发表于 2005-04-13 16:02 |只看该作者

数组参数的地址和数组参数的第一个元素的地址竟然不一样

原帖由 "chenjinhuo" 发表:
      my_array_func(ga) ;
        C中数组参数的地址和数组参数的第一个元素的地址竟然不一样.但是事实就是如此.----------<<c专家编程>;>;.
        }


奇怪吗,小伙子?看来你还是对c语言理解不够透彻。
在c语言中,数组的地址(&array)的确是与数组第一个元素的地址(&array[0])相同,但这只是对数组而言,正如你main程序中得到的;

而对于函数的参数,即使你写成了数组格式,但实际上还是一个指针,就是func(char array[10])与func(char *array)实际上没区别,这里的array都是指针;你用sizeof(array)计算两者,得到的结果都是4!另外,需要说明的是,c语言是传值型的语言,函数中的参数的值实际上是编译为原变量临时生成的一个副本(临时变量),其地址当然是临时变量的地址;正如你看到的,在 my_pointer_func(char *pa) 中,&pa的地址是临时变量地址,与&ga的地址是不同的;my_array_func(char ca[10]) 与my_pointer_func(char *pa)是同样的道理。

论坛徽章:
0
4 [报告]
发表于 2005-04-13 16:04 |只看该作者

数组参数的地址和数组参数的第一个元素的地址竟然不一样

原帖由 "chenjinhuo" 发表:
      my_array_func(ga) ;
        C中数组参数的地址和数组参数的第一个元素的地址竟然不一样.但是事实就是如此.----------<<c专家编程>;>;.
        }


奇怪吗,小伙子?看来你还是对c语言理解不够透彻。
在c语言中,数组的地址(&array)的确是与数组第一个元素的地址(&array[0])相同,但这只是对数组而言,正如你main程序中得到的;

而对于函数的参数,即使你写成了数组格式,但实际上还是一个指针,就是func(char array[10])与func(char *array)实际上没区别,这里的array都是指针;你用sizeof(array)计算两者,得到的结果都是4!另外,需要说明的是,c语言是传值型的语言,函数中的参数的值实际上是编译为原变量临时生成的一个副本(临时变量),其地址当然是临时变量的地址;正如你看到的,在 my_pointer_func(char *pa) 中,&pa的地址是临时变量地址,与&ga的地址是不同的;my_array_func(char ca[10]) 与my_pointer_func(char *pa)是同样的道理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP