c语言函数参数问题 c语言函数参数太多问题如何解决

c语言函数的形参与实参的问题?

首先要理解一点,数组在做参数传递的过程中会损失数组的长度信息,退化成一个指针

我们注重客户提出的每个要求,我们充分考虑每一个细节,我们积极的做好网站设计制作、做网站服务,我们努力开拓更好的视野,通过不懈的努力,创新互联建站赢得了业内的良好声誉,这一切,也不断的激励着我们更好的服务客户。 主要业务:网站建设,网站制作,网站设计,重庆小程序开发,网站开发,技术开发实力,DIV+CSS,PHP及ASP,ASP.Net,SQL数据库的技术开发工程师。

例如你形参写成(char s[10]),或者干脆(char s[]),函数只能接收到一个char *

所以:

char dp[n][m]的类型本质上是数组的指针,即char (*)[m],它是指向长度为m的char数组的指针

char **是char *的指针,指针是由数组退化来的,所以一般来说,它原来是一个char *的数组,即 char *ps[m]。

数组的数组(或数组的指针)和指针的数组(或指针的指针),当然是不同的两个类型。

至于如何修改,需要你明确你的函数要处理数组的数组,还是指针的数组,再根据情况修改。

如果是数组的数组,那么参数变为:testlength(char (*p)[max],注意这里只能是数或者宏,不能是变量,调用时实参不用变化

如果是指针的数组,那么参数不变,char **dp,实参变为:char *p[2] = {s1, s2}

C语言函数调动参数问题

#include stdio.h

//指针加*是不会改变其指向的,只会修改其中的内容

int *f(int *s, int *t) //s指向i,t指向j

{

if (*s  *t) //这里比较的是i与j的值

{

*s = *t; //*s表示取s地址的内容,即i,所以*t是表示j,这里是将j赋值给i

//所以改变了i的值,但是并没有改变s与t的指向,还是分别指向i与j

}

return s;

}

int main()

{

int i = 3, j = 5;

int *p = i; //p是指向i的

int *q = j; //q是指向j的

int *r;

r = f(p, q); //将s的地址赋值给r

printf("%d, %d, %d, %d, %d\n", i, j, *p, *q, *r);

return 0;

}

运行结果是:5, 5, 5, 5, 5

#include stdio.h

int k = 5;

void f(int *s) //这里传参只是将p的地址赋值给s,也就是将s指向了m

{

s = k; //将s指向k,并没有改变p的指向

}

int main()

{

int m = 3;

int *p = m;

f(p); //所以程序执行完,p还是指向m,而s是指向k的

printf("%d, %d\n", m, *p);

return 0;

}

运行结果:3, 3

#include stdio.h

//指针加*是不会改变其指向的,只会修改其中的内容

//如果指针不加*,则赋值就是改变其指向

int *f(int *s, int *t) //s指向i,t指向j

{

if (*s  *t) //这里比较的是i与j的值

{

s = t; //s表示的是指针,这里不是表示其内容,所以这里是将t指向的地址赋值给了s

//也就是s与t是指向同一块内存空间,也就是将s也指向了j

}

return s;

}

int main()

{

int i = 3, j = 5;

int *p = i; //p是指向i的

int *q = j; //q是指向j的

int *r;

r = f(p, q); //将s的地址赋值给r,r也指向了j

printf("%d, %d, %d, %d, %d\n", i, j, *p, *q, *r);

return 0;

}

运行结果:3, 5, 3, 5, 5

这一类题目其实只要打个草稿就行了,写两个数字,然后*p就是表示取其中的内容,p就表示其指向(也就是内容的地址),只要是加*的赋值就表示改变其p指向的变量赋值,如果没有加*就是改变指针的指向。

c语言函数参数

C语言中参数分为实际参数(实参)与形式参数(形参)。

实际参数是在调用时传递个该函数的参数。

形式参数是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传如的参数。

实际参数是在调用时传递个该函数的参数.

举一个很简单的例子:

#includestdio.h

int f(int b) // b为形参

{

return b;

}

void main()

{

int a=1;

printf("%d",f(a));// a为实参

}

C语言中用函数做函数的形式参数的问题

给你举个例子吧,这样就容易理解得多。

例子:设计一个函数func();在调用它时每次实现不同的函数功能,输入两个参数a和b,第一次调用func()时找出a和b中的较大者,第二次调用找出较小者,第三次调用求a和b之和。

说明:格式

(*p)()

表示定义一个指向函数的指针变量p,在c语言中这个格式是固定的,前面的()表示p先和*结合,是指针变量,后面的()表示p指向一个函数。前面的()不能省略,如果写成

*p(),由于()优先级比*高,那就表示p()函数返回的是一个指针,p本身就是函数不是指针了,意思完全变了。

任何一个函数,函数名就是该函数的入口地址(起始地址),也就是说函数名就是个地址,从这个地址开始,函数占用一段内存单元。因此可以用一个指针变量来指向这个这个函数名,这样就相当于指向这个函数了。所以下面的max,min,add函数都是一个地址,分别调用时就是赋值p=max,p=min,p=add,也就是(*p)(x,y)分别就等于max(x,y),min(x,y),add(x,y).

程序在win-tc和Dev-c++下调试通过。

#include

stdio.h

#include

conio.h

int

max(int

x,int

y)

{

return(xy?x:y);

}

int

min(int

x,int

y)

{

return(xy?x:y);

}

int

add(int

x,int

y)

{

return(x+y);

}

int

func(int

x,int

y,int

(*p)())

/*定义指向函数的指针变量p,关键1*/

{int

result;

result=(*p)(x,y);

/*调用相应函数,函数名即地址给p,这样p指向该函数,关键2*/

printf("%d\n",result);

}

main()

{

int

a,b;

printf("Please

input

two

integers

a

and

b:\n");

scanf("%d%d",a,b);

printf("max=");

func(a,b,max);/*相当于赋值p=max*/

printf("min=");

func(a,b,min);/*相当于赋值p=min*/

printf("add=");

func(a,b,add);/*相当于赋值p=add*/

getch();

}

关于C语言的主函数参数问题

看看这个例子就知道了,在同一文件夹先编译hello.c再编译main.c运行

main.c

#include stdio.h

#include process.h

int main()

{

char a[100];

int b;

printf("调用hello.exe, 第一个参数为改应用程序的名称\n");

execl("hello.exe","1hello","2hello",NULL);

printf("进程已经被递交给了hello.exe,这里不会再执行");

return 0;

}

hello.c

#include stdio.h

int main(int argc, char *argv[])

{

int i;

printf("命令行参数有%d个,分别是:\n",argc);

for(i=0;iargc;i++)

printf("%s\n",argv[i]);

return 0;

}

除了execl

还有spawnl:


网站栏目:c语言函数参数问题 c语言函数参数太多问题如何解决
标题链接:http://ybzwz.com/article/dosscdg.html