c语言中函数调用的方式有哪些?

1. C语言中函数调用的方式

C语言作为一种结构化的程序设计语言,其函数调用是比较常见的操作。在C语言中,函数调用有多种方式,包括以下几种:

1.1 值传递

值传递是指在函数调用时,将实参的值复制一份传递给形参,在函数内部对形参的操作不会影响实参的值。

void swap(int a, int b){

int temp = a;

a = b;

b = temp;

}

int main(){

int x = 1, y = 2;

swap(x, y);

printf("x=%d, y=%d", x, y); // 输出结果为:x=1, y=2

return 0;

}

在上面的代码中,我们定义了一个swap()函数,并在main()函数中调用该函数来交换变量x和y的值。由于采用的是值传递的方式,因此函数内部对形参a和b的操作并不会影响到实参x和y的值。

1.2 指针传递

指针传递是将实参的地址传递给形参,函数内部通过指针对实参进行操作,可以直接修改实参的值。

void swap(int *a, int *b){

int temp = *a;

*a = *b;

*b = temp;

}

int main(){

int x = 1, y = 2;

swap(&x, &y);

printf("x=%d, y=%d", x, y); // 输出结果为:x=2, y=1

return 0;

}

在上面的代码中,我们将变量x和y的地址传递给swap()函数中的形参a和b。在函数内部,通过指针对实参进行操作,因此可以直接修改实参的值。

1.3 数组传递

数组传递是将数组的地址作为实参传递给形参,在函数内部对数组进行操作。

void print(int arr[], int len){

for(int i = 0; i < len; i++){

printf("%d ", arr[i]);

}

}

int main(){

int arr[] = {1, 2, 3, 4, 5};

print(arr, 5); // 输出结果为:1 2 3 4 5

return 0;

}

在上面的代码中,我们定义了一个print()函数,并将数组arr的地址和数组的长度作为实参传递给该函数。在函数内部,我们通过数组名和下标对数组元素进行访问,达到打印数组元素的目的。

1.4 结构体传递

结构体传递是将结构体的地址作为实参传递给形参,在函数内部对结构体进行操作。

struct student{

int id;

char name[20];

float score;

};

void print(struct student *p){

printf("id:%d, name:%s, score:%.2f\n", p->id, p->name, p->score);

}

int main(){

struct student s = {1001, "Tom", 89.5};

print(&s); // 输出结果为:id:1001, name:Tom, score:89.50

return 0;

}

在上面的代码中,我们定义了一个结构体student,并定义了一个print()函数,通过指针对结构体成员进行访问,打印结构体的值。

1.5 函数指针传递

函数指针传递是将一个函数的地址作为实参传递给形参,在函数内部通过该函数指针调用函数。

int add(int a, int b){

return a + b;

}

int sub(int a, int b){

return a - b;

}

void calculate(int (*p)(int, int)){

int result = p(4, 5);

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

}

int main(){

calculate(add); // 输出结果为:result=9

calculate(sub); // 输出结果为:result=-1

return 0;

}

在上面的代码中,我们定义了两个函数add()和sub(),这两个函数都接收两个整数参数,并返回一个整数。接着我们定义了一个calculate()函数,该函数接收一个函数指针作为参数,并通过该函数指针调用函数。在main()函数中,我们分别调用calculate()函数,并将add()和sub()函数的地址作为实参传递给该函数。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签