您的位置:

c语言数组指针做函数参数,c语言中数组做函数参数

本文目录一览:

请问在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语言中 指针做函数参数传递二维数组

#include stdio.h

void fun(int (*p1)[3],int (*p2)[3]);

int main()

{

int p1[3][3]={{7,8,9},{4,5,6},{1,2,3}} ;

int p2[3][3] = {0};

int i = 0, j = 0;

fun(p1,p2);

for(i = 0;i 3;i++){

for(j = 0;j 3;j++){

printf("%d ",*(*(p2+i)+j)); 

}

printf("\n");

}     

return 0;

}

void fun(int (*p1)[3],int (*p2)[3])

{

int i = 0,j = 0;

for(i = 0;i 3;i++){

for(j = 0;j 3;j++){

*(p2[j]+i) = *(p1[i]+j);

}

}

}

扩展资料:

函数指针的声明方法为:

返回值类型 ( * 指针变量名) ([形参列表]);

其中,“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:

int func(int x); /* 声明一个函数 */

int (*f) (int x); /* 声明一个函数指针 */

f=func; /* 将func函数的首地址赋给指针f */

或者使用下面的方法将函数地址赋给函数指针:

f = func;

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

参考资料:

百度百科-函数指针

C语言使用数组指针参数传递

用指针传递一维数组。

#include stdio.h

#include math.h

float dist( float *p1, float *p2){

float d[3],ds;

int i;

for (i=0;i3;i++) d[i] = p2[i]-p1[i];

ds = sqrt( d[0]*d[0]+ d[1]*d[1]+d[2]*d[2]);

return ds;

};

void vec( float *p1, float *p2, float *p3){

int i;

for (i=0;i3;i++) p3[i]=p1[i]+p2[i];

}

int main()

{

float a[3],b[3],c[3];

int i;

printf("input x y z for point 1\n");

for (i=0;i3;i++)scanf("%f",a[i]);

printf("input x y z for point 2\n");

for (i=0;i3;i++)scanf("%f",b[i]);

printf("distence: %g\n", dist(a,b));

printf("\n");

vec(a,b,c);

for (i=0;i3;i++) printf("%g ",c[i]);

return 0;

}

C语言,使用指针作为函数参数,写一求数组中最大值和最小指的函数

#include<stdio.h>

voidhanshu(int*arry,intsize,int*m,int*n)

*m=arry[0];

*n=arry[1];

for(inti=0;i<size;i++)

if(arry[i]>*m)

*m=arry[i];

if(arry[i]<*n)

*n=arry[i];

intmain(intargc,constchar*argv[]){。

inta[]={1,5,6,2,3,8,9,7,4,5};//定义一个十个数据的数组

intmax;//存放最大值

intmin;//存放最小值

hanshu(a,10,&max,&min);//函数传送数组,并将最大值,最小值的地址传送

printf("Themaxnumberis%d\n",max);

printf("Theminnumberis%d\n",min);

return0;

扩展资料:

include用法:

#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。

插入头文件的内容

#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:

1、#includelt;文件名gt;

2、#include"文件名"

C语言中,数组做函数参数如何才能按值传递?

传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。

void func(int array[10])

void func(int array[])

void func(int *array)

所以以上三种函数声明完全等同。

实际情况是,数组做参数,完全无法按值传递。这是由C/C++函数的实现机制决定的。

下一个问题是:为什么偏要按值传递呢?当要在一个函数内使用一个数组时,传一个指针进去不就行了?只要能访问到我们所要的数据并对其进行操作,何苦钻牛角尖。

c语言中数组名作为函数参数

要将数组长度作为一个参数传给average函数,不能在average函数内部通过int arrLen = sizeof(a) / 4;来计算数组长度。因为float average(float a[10])就相当于float average(float *a) ,所以sizeof(a)恒等于4,sizeof(a) / 4恒等于1。

应该这样:

float average(float a[10],int arrLen) {

float sumSco = 0;

for (int i = 0; i arrLen; i++)

{

sumSco += a[i];

}

return sumSco / arrLen;

}