关于一个型参和实参的问题?
请教下当形参为数组时,是否回创建临时变量空间
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




