谁能解释一下数组在函数中该怎么传递(c++中)

1.从主函数中传递数组参数给子函数2.在子函数中定义一个新的数组,怎么传递给主函数3.用指针怎么传递数组4.数组不能用引用,是吗?... 1.从主函数中传递数组参数给子函数
2.在子函数中定义一个新的数组,怎么传递给主函数
3.用指针怎么传递数组
4.数组不能用引用,是吗?
展开
 我来答
8826055
2015-09-26 · TA获得超过7510个赞
知道大有可为答主
回答量:1680
采纳率:81%
帮助的人:899万
展开全部

数组在C++中是以指针的形式进行传递的。

我们可以把形参写成指针形式,也可以写成数组形式,但本质上传递的都是指针。引用《C++ Primer》上的一个例子:

//尽管形式不同,但这三个print函数是等价的
//每个函数都有一个const int*类型的形参
void print(const int*);
void print(const int[]);   //可以看出来,函数的意图是作用于一个数组
void print(const int[10]); //这里的维度表示我们期望数组含有多少元素,实际不一定

以上三种形式的声明是等价的,当调用print函数时,编译器只检查传入的参数是否是(或能转换成)const int*:

int i = 0, j[2] = {0, 1};
print(&i);  //正确:&i的类型是int*
print(j);   //正确:j转换成int*并指向j[0]
xoalyg
2011-11-09 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2380万
展开全部
1、数组在函数中的传递是以指针方式进行的,作为实参,被调函数仅接收数组的首址,至于数组的长度往往需要另外一个实参提供(字符数组除外),
2、欲将在被调函数中定义的数组传递(返回)给调用函数,需要动态申请(new)内存,并仍以指针方式回传,长度不需要回传,但要记住在程序结束前要释放(delete)已申请的动态空间。
追问
数组怎么传回去
追答
int *fun(int n) {
static int *np = new int[n];
for(i = 0;i < 10;i++) {
*(np + 1) = 2*i + 1;
}
return np;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bf6189278
2011-11-09 · TA获得超过181个赞
知道小有建树答主
回答量:257
采纳率:0%
帮助的人:203万
展开全部
1.直接传数组首地址,即数组的变量名;
2.最好使用new/allocate,在主函数中delete/free;
3.数组首地址就是指针,当然如有必要,把长度也传递;
4.即有指针又有引用看上就乱了,但应该可以用指针的引用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuanduan66
2011-11-09 · 超过22用户采纳过TA的回答
知道答主
回答量:124
采纳率:0%
帮助的人:65.1万
展开全部
数组名+数组大小。只能这样子。
int A[10];
1.int GetArray( int B[], int length);
2.在子函数里 new 一个或者 malloc一个新数组,但不支持这样做,会有风险
3.int GetArray( int* B, int length);
4.数组可以引用,但是其结果,得到的只是一个数组头个元素的地址。
更多追问追答
追问
不好意思,还是不太明白。。。。
追答
当你试图去把一个数组传递给一个函数作为参数来使用。这个参数只能当做指针来使用,你无法像以前一样去那么方便的使用它。也就是说 int A[10] 传递进去变成了int *pa = &A[0]; 当你需要取值的时候,如A[2],pa[2]都是一样的效果。但是,不能像sizeof(A)一样去获取数组大小。
- -,反正,函数里你继续当数组用它。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gzliu_hit
2011-11-09
知道答主
回答量:30
采纳率:0%
帮助的人:15.7万
展开全部
函数中数组的传递,实际上传递的是数组的首地址,理解了这一点就行了
指针是地址,引用也是地址。。。
追问
能举些具体的例子吗
追答
int func(int a[], int n)
{
int i;
for (i=0; i<n; i++)
printf("a[&d]: %d\n", i, *(a+i)); // 也可以是a[i]。传进来的只是主函数中数组b的首地址,所以在函数里a只是个指针,可以用像a+i这样的偏移地址来引用数组的元素
}

int main()
{
int b[10];
int i;
for (i=0; i<10; i++) // 初始化
b[i] = i;
func(b, 10);

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式