C语言——函数、参数和指针

本文深入介绍了C语言中的函数定义、声明和使用,包括参数和返回值的概念。通过实例展示了如何计算序列和比较数值,并探讨了形参与实参、传值与传址的区别。此外,还详细讲解了传数组和使用可变参数的技巧,为理解和运用C语言函数提供了全面的知识基础。
摘要由CSDN通过智能技术生成

目录

一、函数

1.定义

2.函数的声明

3.函数的参数和返回值

 二、参数和指针

1.形参和实参

2.传值和传址

3.传数组

4.可变参数


一、函数

1.定义

类型名 函数名(参数列表)
{

    函数体

}

2.函数的声明

所谓声明(Declaration),就是告诉编译器我要使用这个函数,你现在没有找到它的定义不要紧,请不要报错,稍后我会把定义补上。

代码举例:

#include <stdio.h>

void print_C();//函数的声明 

//函数的定义 
void print_C()
{
	printf(" ###### \n");
	printf("##    ## \n");
	printf("##       \n");
	printf("##       \n");
	printf("##       \n");
	printf("##    ## \n");
	printf(" ###### \n");
}

int main()
{
	print_C();//函数的调用 
	
	return 0;
	
}

运行结果:

3.函数的参数和返回值

  • 有时候,函数需要接收用户传入的数据,就需要使用到函数的参数。根据需求,函数的参数可以有多个,类型也可以各不相同。而函数的返回值通常的反馈函数的计算结果,也可以用来表示函数的执行结果。

代码实战1:编写一个函数sum,由用户输入参数 n,计算 1 + 2 + 3 + ... +(n-1)+ n  的结果并返回。

代码如下:

#include <stdio.h>

int sum(int n);

int sum(int n)
{
	int result = 0;
	
	do
	{
		result += n;
	}while(n-- > 0);
	
	return result;
}

int main()
{
	int n,result;
	
	printf("请输入n的值:");
	scanf("%d", &n);
	
	printf("1+2+3+...+(n-1)+n的结果是:%d\n",sum(n));
	
	return 0;
}

运行结果:

代码实战2:编写一个函数max,接收两个整型参数,并返回它们中的较大的值。

代码如下:

#include <stdio.h>

int max(int,int);

int max(int x,int y)
{
	if(x > y)
		return x;
	else
		return y;
}
int main()
{
	int a,b,c;
	
	printf("请输入两个整数:");
	scanf("%d%d",&a,&b);
	
	c = max(a,b);
	printf("它们中的较大值是:%d\n",c);
	
	return 0;
}

运行结果:

 二、参数和指针

1.形参和实参

  • 形参:形式参数;实参:实际参数。
  • 形参和实参用于数据传输。当函数发生调用时,实参的值会传递给形参,且传输具有单向性。
  • 形参变量只在函数的内部有效。

2.传值和传址

不使用指针时:

代码举例:

#include <stdio.h>

void swap(int x,int y);

void swap(int x,int y)
{
	int temp;
	
	printf("In swap,互换前:x = %d, y = %d\n",x,y);
	
	temp = x;
	x = y;
	y = temp;
	
	printf("In swap,互换后:x = %d, y = %d\n",x,y);
}
int main()
{
	int x = 3,y = 5;
	
	printf("In main,互换前:x = %d, y = %d\n",x,y);
	swap(x,y);
	printf("In main,互换后:x = %d, y = %d\n",x,y);
	
	return 0;
	
}

运行结果:

 使用指针后:

代码举例:

#include <stdio.h>

void swap(int *x,int *y);

void swap(int *x,int *y)
{
	int temp;
	
	printf("In swap,互换前:x = %d, y = %d\n",*x,*y);
	
	temp = *x;
	*x = *y;
	*y = temp;
	
	printf("In swap,互换后:x = %d, y = %d\n",*x,*y);
}
int main()
{
	int x = 3,y = 5;
	
	printf("In main,互换前:x = %d, y = %d\n",x,y);
	swap(&x,&y);
	printf("In main,互换后:x = %d, y = %d\n",x,y);
	
	return 0;
	
}

运行结果:

3.传数组

代码举例:

#include <stdio.h>

void get_array(int b[10]);

void get_array(int b[10])
{
	printf("sizeof b: %d\n",sizeof(b));
}
int main()
{
	int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
	printf("sizeof a: %d\n",sizeof(a));
	get_array(a);
	
	return 0;
}

运行结果:

4.可变参数

#include <stdarg.h>

 -va_list
 -va_start
 -va_arg
 -va_end

代码举例:

#include <stdio.h>
#include <stdarg.h>

int sum(int n, ...);

int sum(int n, ...)
{
	int i,sum = 0;
	
	va_list vap;
	
	va_start(vap,n);
	
	for(i = 0;i < n; i++)
	{
		sum += va_arg(vap,int);
	}
	va_end(vap);//关闭参数列表 
	
	return sum;
}

int main()
{
	int result;
	
	result = sum(3, 1, 2, 3);
	printf("result = %d\n",result);
	
	result = sum(5, 1, 2, 3, 4, 5);
	printf("result = %d\n",result);
	
	result = sum(6, 3, 1, 2, 4, 99, 100);
	printf("result = %d\n",result);
	
	return 0;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值