| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1012 人关注过本帖
标题:关于数组作为参数的问题
只看楼主 加入收藏
wenxinwukui
Rank: 1
等 级:新手上路
帖 子:22
专家分:6
注 册:2010-11-15
收藏
 问题点数:0 回复次数:9 
关于数组作为参数的问题
请看一下这个小程序:
void print(int x[]){
    int m = sizeof(x)/sizeof(x[0]);

    for(int i = 0;i< m ;i++){
        cout<<x[i]<<" ";
    }
    cout<<endl;
}
int main(){
    int a[] = {1,2,3};
    print(a);
}
这个程序的输出结果是:
1
请问有没办法输出整个数组中的元素:也就是有没有办法使得传到函数print中的是整个数组,而不仅仅是数组的首地址?(除了在print中加入数组大小size即写成print(int a[],size)这种方法外,有没有其他方法?)
搜索更多相关主题的帖子: 参数 
2010-11-16 10:17
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
收藏
得分:0 
C++没有真正的数组,都是传首地址的

Viva,espana!
2010-11-16 10:19
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
将数组传递到函数中数组首地址会退化成指针,
传引用 void print(int (&a)[3]),但常用的方法就是传首地址+数组个数。

离恨恰如春草,更行更远还生。
2010-11-16 14:04
VenusNefu
Rank: 2
等 级:论坛游民
帖 子:14
专家分:11
注 册:2010-11-24
收藏
得分:0 
回复 楼主 wenxinwukui
int m = sizeof(x)/sizeof(x[0]);
中,x只是一个地址,我的机子是32位地址,所以 sizeof(x)为4字节
sizeof(x[0])中,因为存储的是int4字节,所以sizeof(x[0])为4字节

所以m=1
2010-11-24 12:54
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
C 式的方法就是传数组及大小。
C++ 式的方法就是把这些东西包装成一个类,而类内部有识别自身长度的方法。对这个问题其实不仅没变简单,反而复杂化了。
2010-11-24 23:17
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 楼主 wenxinwukui
简单的说。在作为参数是数组名会退化为指针。
至于为什么会这样。那就是这个语句在C++和C中的底层都是当做指针处理的。
你可以对你的程序进行反汇编看看,应该就能够清楚了。

南国利剑
2010-11-25 00:57
wenxinwukui
Rank: 1
等 级:新手上路
帖 子:22
专家分:6
注 册:2010-11-15
收藏
得分:0 
多谢各位指教啊,谢谢
2010-11-25 10:06
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
#include <iostream>
using namespace std;
void print(int a[])
{
    for(int i = 0;i<10;i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;
}
int main()
{
    int *p=new int[10];//把数组建立在堆内存上面  不出现delete之前他是不会被释放掉的
    for(int i=0;i<10;i++)//也就是它的生存期是碰到delete[]p;之前
        p[i]=i;
    print(p);
    system("pause");
    delete[]p;//释放掉数组
    return 0;
}
楼主如果可以把int *p=new int[10]; 改成int a[10]={.........};可以看到输出结果还是就一个1
这是因为int a[10]={.........};会把数组建立在栈上面 它会由编译系统自动释放掉;

                                         
===========深入<----------------->浅出============
2010-11-25 15:53
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
2010-11-25 16:25
kittel
Rank: 2
来 自:武汉
等 级:论坛游民
威 望:1
帖 子:38
专家分:73
注 册:2010-11-19
收藏
得分:0 
回复 楼主 wenxinwukui
print函数里的参数用指针或引用传递,如果用整个数组很浪费资源,编程效率低。
2010-11-26 17:17
快速回复:关于数组作为参数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013124 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved