CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

关于一个型参和实参的问题?

楼主RTOS_xiaofei()2006-07-02 20:13:08 在 C/C++ / C++ 语言 提问

请教下当形参为数组时,是否回创建临时变量空间  
  struct   Temp  
  {  
  int   age;  
  int   number;  
  int   hao;  
  };  
  void   fun(Temp   p[2][2])  
  {  
   
   
  }  
  void   main()  
  {  
  Temp   a[2][2]   =   {  
                                                      {{1,0,3},{2,0,3}},  
                  {{1,0,7},{2,0,5}}  
                                                  };  
   
  fun(a);  
   
  }  
  疑问在,p[0][2]是否会分配一个临时的内存空间,谢谢大虾指点,数组一般要传地址,怎样才能叫传一个大的数组 问题点数:20、回复次数:7Top

1 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2006-07-02 20:23:36 得分 0

数组为参数时永远不会被副制,这是primer上说的Top

2 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2006-07-02 20:25:44 得分 0

错别字,复制  
   
  给楼主一个建议,在一般大公司的编码规范中,多维数组一般是不允许使用的,二维数组的使用也常受到限制。任何数组操作,一维数组足已。  
   
  //8X8的矩阵  
  int   a[8*8];  
  //将第3行第4列赋为10;  
  a[2*8+3]=10;Top

3 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2006-07-02 20:26:37 得分 0

又一个错别字,足矣  
   
  今天怎么手有点抖?Top

4 楼RTOS_xiaofei()回复于 2006-07-02 20:35:02 得分 0

多谢   多谢!我以为只有是数组传地址才没有生成副本,比如void   fun(Temp   (*p)[2])而void   fun(Temp   p[2][2])会有一个p[2][2]大小空间的副本,用a[2][2]来初始化它Top

5 楼chengzanmiao(高薪為共產當多納稅)回复于 2006-07-02 20:36:47 得分 0

首先   没有p[0][2],有也是p[0][1];  
  其次,数组名作为函数的参数传递时,已经蜕变成指针,指向相应的数组内存.  
  这个指针可供操作的内存空间是数组定义时的内存空间,超出就导致越界.  
   
  可以参看申明一个数组,和申明一个指针p,再用p   malloc(sizeof(数组));把数组名和指针p作为实参传递看俩者的异同.  
  Top

6 楼RTOS_xiaofei()回复于 2006-07-02 20:39:57 得分 0

那p[2][2]和a[2][2]使用的是同一片内存空间???Top

7 楼menapoleon(百无禁忌)回复于 2006-07-03 09:18:51 得分 0

那p[2][2]和a[2][2]使用的是同一片内存空间???  
  -->是的,但p指针只是a指针的一个副本。Top

相关问题

关键词

得分解答快速导航

  • 帖主:RTOS_xiaofei

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo