问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-26 15:27

我来回答

4个回答

热心网友 时间:2023-10-11 21:02

数组参数属于指针参数.

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

如果把数组当作参数, 不管你愿意与否, 它就是指针, 指向第一个值的指针.
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]);
}
}

热心网友 时间:2023-10-11 21:02

1、因为数组在内存中是一块连续的内存,只要将该数组的首地址传进去,当然就可以访问整个数组了。值得注意的是,由于只传了首地址,函数不知道数组的维数,所以还得把数组的维数传进去,那就可以完全操作该数组了。

2、例:有一个函数声明:void fun( int aa[],int size );或者void fun( int *pa,int size );
以上两种声明都一样。
调用上诉函数时:假设有 int ab[10];
fun( ab,10 )就可以了。

热心网友 时间:2023-10-11 21:02

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 ); //传递数组名和数组元素个数
}

热心网友 时间:2023-10-11 21:04

#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;}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2024年四川570分能考上什么大学? 2024年四川文科560分能考上什么大学? 2024年广东561分能考上什么大学? 2024年江苏历史类561分能考上什么大学? 在形ABC中,角A.B.C所对的边分别为a.b.c,且acosB+bcosA=2c cos 求... ...B、C的对边分别为a、b、c,已知acosB+bcosA=2(bcosC+ccosB).(1... ...b、c的对边分别为a、b、c,且acosb+bcosa=2cosc 在△ ABC中,角A、B、C所对的边分别为a、b、c,已知b=cosA,c=2cosB,试... 在△ABC中,角A,B,C所对的边分别为a,b,c,且满足bcosA+acosB=2ccosC,△... ...对应的边分别为a、b、c,且满足aCOSB+bcosA=2cCOSC... c语言字符型数组传入函数? 佳能200d二代和600d哪个好?- 问一问 大家觉得佳能新出200DII怎么样? 佳能200d2拍视频用什么档位,AF还是MF? 佳能200d2代和佳能m3哪个比较好? 佳能200d二代拍视频怎么样? 宠物行业公司有哪些 宠物公司怎么样取名。最好是结合行业特征的。 Flash编程的学习.知道的进 求Flash AS3.0入门教程 想学flash做动画、请问下 得具备什么基础?还有,需要用到编程吗? Flash CS5中文版基础教程的内容简介 怎么制作FLASH?需要什么工具? 网络电视可以不用绑定手机号开通VIP吗? flash 学习步骤的问题! 现在建造游泳池防水都是怎么做的? 我想学习Flash动画,想知道先从哪开始学 有什么网络电话既不用注册手机号又可以免费使用的??? 游泳池的防水工作是怎么做的? FLASH8.0详细教程~! c语言 字符串传参问题 C语言关于数组传参的问题,传名字 c语言数组如何在函数中传递?不要指针传递 C语言编程问题,怎么把一个字符型数组传递给函数。 C语言字符数组怎么用? 在C语言中,用数组名作为函数调用时的实参,实际上传递给形参的是____________。 C语言中关于字符数组做形参的问题~菜鸟求救~ C语言二级考试数组传参 C语言传字符串数组 C语言 传递一个字符串参数 新手的问题 c语言如何传递字符串? 图中是什么字体,喜欢有科技感和机械感的字体 c语言二维字符数组传入函数的问题 梦见白纸变成粉红渐变色怎么说? 在c语言中 实现一个函数,传递一个字符数组,返回字符数组中的整数值,并在main函数中输出。 朋友 你好 请问你知道创维logo是什么字体了么 C语言怎样给字符数组赋值 什么是国际感?设计LOGO要有科技感、国际感 做手机版面时,用什么样的字体能体现科技感? 梦见两张写着毛笔字的粉色纸放在胸上