当前位置:首页 » 编程语言 » c语言函数传参数

c语言函数传参数

发布时间: 2022-09-06 10:17:24

1. c语言函数参数传出怎么用

struct Student st;
void function(struct Student st);这种形式就是传递地址;
void fuction2(struct Student * pst);这种形式就是传递结构体的地址;
调用这两个函数的形式如下:
function(st);
fuction2(&st);
一般推荐第二种方式,因为第一种方式需要传递整个结构体,需要开辟sizeof(struct student)这么大的内存空间,开销太大,第二种方式则只需要开辟四个字节的内存,用来存放地址;

2. 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; 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]);
}
}

3. C语言函数调用参数传递的是什么

C语言传递的是值而不是地址,这一点从VB转过来的程序员一定要注意。否则不经意间就会犯错误。另外下层函数修改上层函数变量不是一种好习惯,容易引发错误。C语言中函数可以返回一个函数值,如果你需要返回多个函数值可以用下面的形式

fun(int *a, int *b)
{ *a=1;*b=2;}
main()
{ int a, b;
fun(&a,&b) a,b的值被改变
}

如果按VB的习惯,
fun(int a, int b)
{ a=1;b=2;}
main()
{ int a, b;
fun(a,b);a、b的值没有改变
}
是错误的,main中的a,b和fun中的a,b完全是两码事,结果就是调运fun没有任何效果。

4. c语言向函数传递函数作为参数

#include<stdio.h>
//---子函数声明---//
intfunc1();
intfunc2(int(*func1)());//形参为函数指针(即指向函数的指针)
//---主函数---//
intmain(){
printf("向函数二传递函数一, 即函数一作为函数二的参数。 ");
printf("%d",func1());
printf("%d ",func2(func1));//注意函数名即为函数地址!!!!!!
}//实参为函数名func1或者&func1,两者等价,而非func1()
//---子函数定义---//
intfunc1(){
return1;
}

intfunc2(int(*func1)()){//形参为函数指针(即指向函数的指针)
returnfunc1()+1;
}

5. c语言函数传参问题

说下传值,传址以及引用吧。
传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。
传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。
传引用,实际是通过指针来实现的,能达到使用的效果如传址,可是使用方式如传值。
说几点建议:
如果传值的话,会生成新的对象,花费时间和空间,而在退出函数的时候,又会销毁该对象,花费时间和空间。
因而如果int,char等固有类型,而是你自己定义的类或结构等,都建议传指针或引用,因为他们不会创建新的对象。

6. 在C语言中,定义一个函数的形参和实参之间具体是如何进行参数传递的

传值调用和引用调用传值调用和引用调用指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。没有形参的函数在形参表的位置应该写void.main
函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。
形参和实参的对照实例(C语言版)main(){int
n;printf("input
number
\n");scanf("%d",&n);s(n);printf("n=%d\n",n);}int
s(int
n){int
i;for(i=n-1;i>=1;i--)n=n+i;printf("n=%d\n",n);}

7. c语言中,带参数的主函数,如何传递参数给它

不可能按值传递的,设想一下
type
*arr
=。。。。。
sizeof(arr)为100万了字节,如果按照值传递,就要创建一个临时变量temp也为100万个字节,效率岂不是太低了。再可能arr是堆内存,参数传递是要属性相同,值相同,难道系统自行去new一段内存,这该用户去释放
还是系统自动回收呢?

8. c语言函数参数传递方向

C语言中函数参数传递的三种方式(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数

9. C语言函数参数的传入

你这是
参数传递
进去的其实是数组的地址,在函数内部修改了以后,数组的内容就已经真正的修改了,所以函数返回以后,继续访问这个数组,得到的数据就是修改以后的。
比如:
int array[12][12];
_arcs(arrar)
在访问array就是修改后的数据了

10. c语言:字符串做为函数参数传递

1、值传递

void swap(int x,int y)

{ int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

}

执行后,并不会交换。

2、引用传递

void swap(int &x,int &y)

{ int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

printf("a=%d b=%d ", a, b);

}

执行后,发生交换。

3、指针传递

void swap(int *x,int *y)

{ int temp = *x; *x = *y; *y = temp;

}void main()

{

int a = 10, b = 20;

swap(&a, &b);

printf("a=%d b=%d ", a, b);

}

执行后,发生交换。

参数传递只有上面三种,但是如果加上数组,就会产生几种新形式。

首先,明确数组型变量名本身只是该数组所占存储空间的首地址:

int a[3] = { 1, 2, 3 }; int *p = a; //等价于下行 //int *p = &a[0];

printf("%d", *p);

典型的数组做参数。

void fun(char s[]){ for (int i = 0; s[i] != ''; i++)

printf("%c", s[i]);

}void main()

{ char str[] = "Hello World!";

fun(str);

}

函数调用时,这里系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。

其实本质与下相同,只不过还是数组形式的(数组名代替指针)。

既然数组型变量名本身只是该数组所占存储空间的首地址,我们当然可以用指针做形参来接收数组实参。

void fun(char *p){ while (*p)

{

printf("%c", *p);

p++;

}

}void main()

{ char str[] = "Hello World!";

fun(str);

}

不过问题是如果这样,无法把握数组结束(除非知道数组长度)。而对于字符数组(上例),由于字符串末尾有结束标志''(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束。

(10)c语言函数传参数扩展阅读:

调用带参数的函数:

在调用函数时,可以向其传递值,这些值被称为参数。

这些参数可以在函数中使用。

可以发送任意多的参数,由逗号 (,) 分隔:

myFunction(argument1,argument2)。

当声明函数时,请把参数作为变量来声明:

function myFunction(var1,var2){这里是要执行的代码}。

变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

按值传递参数:

按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。

按值传递参数时,需要在参数名前加"ByVal"关键字。

按地址传递参数:

按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。

如果实参是一个常数或表达式,Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字。

按数组传递参数:

在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:

① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。

② 被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。

参考资料来源:网络-参数传递

参考资料来源:网络-字符串



热点内容
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:784
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249
安卓怎么禁用应用读取列表 发布:2024-09-17 01:46:45 浏览:524
win10设密码在哪里 发布:2024-09-17 01:33:32 浏览:662
情逢敌手迅雷下载ftp 发布:2024-09-17 01:32:35 浏览:337
安卓如何让软件按照步骤自动运行 发布:2024-09-17 01:28:27 浏览:197