c语言函数传参数组 c语言传递数组参数

C语言自定义函数怎么传参,一次性把数组的数据全部传入?数组参数属于指针参数.
指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.
如果把数组当作参数, 不管你愿意与否, 它就是指针, 指向第一个值的指针.
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; isi; 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; isi; 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; isi; 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; isizeof(ns)/sizeof(ns[0]); i) {
printf("%d\n", *(ns i));
}
getchar();
return 0;
}
void getArr(int p[], int si) {
int i;
for (i = 0; isi; 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]);
}
}
C语言中 , 数组名作为函数参数,属于什么传递,为什么?C语言中c语言函数传参数组 , 数组名作为函数参数,属于数组参数传递 。在VB6.0中,允许使用数组作为实参传递到子过程c语言函数传参数组的形参中,数组传递必须采用地址传递c语言函数传参数组的方式来传递参数 。
数组型变量名本身只是该数组所占存储空间的首地址 , 函数调用时 , 系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间 , 此后 , 将实参数组的首地址传递给形参变量 。
扩展资料c语言函数传参数组:
数组参数在传递时应注意以下两个方面:
1、 在实参和形参列表中只写数组名,忽略维数的定义 , 但圆括号不能?。?当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔 。
2、被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界 。
参考资料来源c语言函数传参数组:百度百科-参数传递
在C语言中,数组作为参数,是怎样在函数之间传递的?。浚?/h2>数组作为参数是按地址传递的
数组名就是数组的首地址 。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名 。形参数组名取得该首地址之后,也就等于有了实在的数组 。实际上是形参数组和实参数组为同一数组 , 共同拥有一段内存空间 。
c语言怎么将数组作为函数参数传入?一维数组的元素作为函数实参 , 与同类型的简单变量作为实参一样 , 是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参
数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同 , 是存放在同一存储空间的同一个数组 。这样形参数组
修改时,实参数组也同时被修改了 。形参数组的元素个数可以省略 。
#includestdio.h
//数组作为函数参数,可以省略元素个数
//数组作为函数参数,传递是整个数组的地址,修改了函数形参数组元素的值 , 会影响到外面的实参数组
void change(int array[])
{
printf("array ==%p\n",array);
array[0] = 100;
}
int main()
{
int ages[6] = {10,11,13,15,11,18};
printf("array ==%p\n",ages);
change(ages);
printf("%d\n",ages[0]);
return 0;
}
输出结果为:array ==0x7fff5be26c00
array ==0x7fff5be26c00
100
请问在C语言中,函数传参时怎样利用指针传递数组数组名就是指针,例如:
#include stdio.h
void pr(char *p)
{
printf(p);
}
void main(void)
{
char s[] = "abc";
pr(s);
}
扩展资料:
注意事项
非数组类的声明尽量以指针的方式进行比较好 。倘若一个指针指向的内存并不是一个数组,那么采用数组名的声明方式或许就会给人产生错误的引导 。类似的,如果指向的是一个数组区域,则会给人以更加丰富的信息 。例如:
int main(int argc,char* argv[])
{
/* code here */
}

int main(int argc,char** argv)
{
/* code here */
}
两种方式完全等价,但是前面一种能够更清晰地看出:这个参数是指向某个元素起始地址的指针 , 而后面的这种方式则不能够直观地看出这种含义 。
C语言中 , 数组作为参数,怎样在函数之间传递的?很简单的,数组作为函数参数传递的时候只要是数组名就可以了,因为数组名本身就是数组的首地址 .给个程序看看
#includestdio.h
#define N 3
int array[N][N];
void main()
{
//在主函数内声明被调函数
void convert(int array[][3]);
int i,j;
printf("输入数组:\n");
for(j=0;jN;j)
for(i=0;iN;i)
scanf("%d",array[i][j]);
printf("\n");
for(j=0;jN;j)
{
for(i=0;iN;i)
printf("%d\t",array[i][j]);
printf("\n");
}
//调用矩阵转置函数
convert(array);
printf("\n");
for(i=0;iN;i)
{
for(j=0;jN;j)
printf("%d\t",array[i][j]);
printf("\n");
}
}
void convert(int array[][3])
{
int i,j,t;
for(i=0;iN;i)
for(j=0;jN;j)//设置数组中转置矩阵元素交换
{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
【c语言函数传参数组 c语言传递数组参数】关于c语言函数传参数组和c语言传递数组参数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读