C语言自定义函数怎么传参,一次性把数组的数据全部传入?

请举例说明,定义过程和传参过程!... 请举例说明,定义过程和传参过程! 展开
 我来答
匿名用户
2013-05-22
展开全部
数组参数属于指针参数.

指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.

如果把数组当作参数, 不管你愿意与否, 它就是指针, 指向第一个值的指针.
1. 数组参数就是指向第一个元素的指针: #include <stdio.h>

void getArr(int p[], int si);

int main(void)
{
int ns[] = {1,2,3,4,5};

getArr(ns, sizeof(ns)/sizeof(ns[0]));

getchar();
return 0;
}

void getArr(int p[], int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}

2. 干脆直接声明为指针: #include <stdio.h>

void getArr(int *p, int si);

int main(void)
{
int ns[] = {1,2,3,4,5};

getArr(ns, sizeof(ns)/sizeof(ns[0]));

getchar();
return 0;
}

void getArr(int *p, int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}

3. 即使你在形参中指定维数也不起作用: #include <stdio.h>

void getArr(int p[2], int si);

int main(void)
{
int ns[] = {1,2,3,4,5};

getArr(ns, sizeof(ns)/sizeof(ns[0]));

getchar();
return 0;
}

void getArr(int p[2], int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}

4. 既然是指针, 其值就有被修改的可能: #include <stdio.h>

void getArr(int p[], int si);

int main(void)
{
int ns[] = {1,2,3,4,5};
size_t i;

getArr(ns, sizeof(ns)/sizeof(ns[0]));

for (i = 0; i < sizeof(ns)/sizeof(ns[0]); i++) {
printf("%d\n", *(ns+i));
}

getchar();
return 0;
}

void getArr(int p[], int si) {
int i;
for (i = 0; i < si; i++) {
p[i]++;
}
}

5. 如果是字符数组, 它自己能判断数组尾界: #include <stdio.h>

void getArr(char p[]);

int main(void)
{
char ns[] = "ABCDEFG";

getArr(ns);

getchar();
return 0;
}

void getArr(char p[]) {
int i;
for (i = 0; p[i]; i++) {
printf("%c: %d\n", p[i], p[i]);
}
}
tattackor
推荐于2018-05-02 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:944万
展开全部
1、因为数组在内存中是一块连续的内存,只要将该数组的首地址传进去,当然就可以访问整个数组了。值得注意的是,由于只传了首地址,函数不知道数组的维数,所以还得把数组的维数传进去,那就可以完全操作该数组了。

2、例:有一个函数声明:void fun( int aa[],int size );或者void fun( int *pa,int size );
以上两种声明都一样。
调用上诉函数时:假设有 int ab[10];
fun( ab,10 )就可以了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2015-09-16 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6876万
展开全部

PS: 原创,针对问题回答问题而已

你这个问题就是想知道如何将数组数据传递到子函数中去!

数组名就是数组的首地址,传递数组数据到子函数中去只需要将数组的首地址传递到子函数即可,即参数是个相应类型的指针就可以了。如:

#include <stdio.h>
void prt_arrary( int *a, int n ) //传递数组首地址,和数组元素个数
{
    int i=0;
    for( i=0;i<n;i++ )
        printf("%d ", a[i]); //输出数组中的每个值。这是采用数组方式输出
    printf("\n");
    for( i=0;i<n;i++ )
        printf("%d ", *(a+i) ); //输出数组中的每个值。这是采用指针方式输出
}

void main()
{
    int a[5]={1,3,5,7,9};
    prt_arrary( a, 5 ); //传递数组名和数组元素个数
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
2017-12-29 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:944万
展开全部
1、因为数组在内存中是一块连续的内存,只要将该数组的首地址传进去,当然就可以访问整个数组了。值得注意的是,由于只传了首地址,函数不知道数组的维数,所以还得把数组的维数传进去,那就可以完全操作该数组了。

2、例:有一个函数声明:void fun( int aa[],int size );或者void fun( int *pa,int size );
以上两种声明都一样。
调用上诉函数时:假设有 int ab[10];
fun( ab,10 )就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-22
展开全部
#include <stdio.h>void print(int a[], int len){ int i; for(i = 0; i < len; i++) printf("%d\t", a[i]); printf("\n");}int main(){ int a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; print(a, 9); return 1;}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式