【C语言】函数的四种形式和sizeof的使用

发布于:2025-02-10 ⋅ 阅读:(39) ⋅ 点赞:(0)

相信你是最棒哒!!!


一、函数的四种形式

在C语言中,函数主要有以下四种形式:

一、无参无返回值函数

  • 定义形式

    void func_name() {
        // 函数体
    }

    例如:

    #include<stdio.h>
    void fun()
    {
    	int sum = 0;
    	for (int i = 1; i <= 100; i++)
    		sum += i;
    	printf("%d", sum);
    }
    int main()
    {
    	fun();
    	return 0;
    }

    这种函数没有参数输入,也不返回任何值。它通常用于执行一些固定的操作,如打印信息、进行一些简单的设置等。在调用时,只需写函数名和空括号即可,如fun();

  • 特点

    • 由于没有参数,函数内部的操作是固定的,不会根据外部传入的数据而改变。

    • 没有返回值,所以不能通过函数调用来获取函数内部的计算结果,只能通过函数内部的输出(如打印)等方式来体现函数的作用。

二、有参无返回值函数

  • 定义形式

    void func_name(type1 param1, type2 param2, ...) {
        // 函数体
    }

    例如:

    #include<stdio.h>
    void fun(int n)
    {
    	int sum = 0;
    	for (int i = 1; i <= n; i++)
    		sum += i;
    	printf("%d", sum);
    }
    int main()
    {
    	fun(100);
    	return 0;
    }

    这种函数有参数输入,但没有返回值。参数可以是一个或多个,用于将外部数据传递到函数内部。

  • 特点

    • 参数使得函数具有一定的灵活性,可以根据传入的不同参数值来执行不同的操作。比如上面的print_sum函数,传入不同的整数对,就会打印不同的和。

    • 仍然没有返回值,所以函数的作用主要是通过输出等方式来体现,不能将计算结果带回调用处。

三、无参有返回值函数

  • 定义形式

    return_type func_name() {
        // 函数体
        return value;
    }

    例如:

    #include<stdio.h>
    int  fun()
    {
    	int sum = 0;
    	for (int i = 1; i <= 100; i++)
    		sum += i;
    	return sum;
    }
    int main()
    {
    	int s = fun();
    	printf("%d", s);
    	return 0;
    }

    这种函数没有参数输入,但有返回值。返回值的类型在函数定义时已经确定,如上面的例子中返回值类型是int

  • 特点

    • 没有参数,函数内部的操作相对固定,但可以通过返回值将函数内部的计算结果带回调用处。例如,get_random_number函数每次调用都会返回一个随机数,可以在调用它的代码中获取并使用这个随机数。

四、有参有返回值函数

  • 定义形式

    return_type func_name(type1 param1, type2 param2, ...) {
        // 函数体
        return value;
    }

    例如:

    #include<stdio.h>
    int fun(int n)
    {
    	int sum = 0;
    	for (int i = 1; i <= n; i++)
    		sum += i;
    	return sum;
    }
    int main()
    {
    	int s = fun(100);
    	printf("%d", s);
    	return 0;
    }

    这种函数既有参数输入,又有返回值。参数用于传递外部数据,返回值用于将函数内部的计算结果带回调用处。

  • 特点

    • 参数和返回值使得这种函数功能强大且灵活。可以根据不同的输入参数计算出不同的结果,并通过返回值将结果传递出去。例如max函数,根据传入的两个整数,返回其中较大的一个,可以在调用它的代码中获取这个最大值并进行后续操作。

二、sizeof的使用

sizeof在C语言中是一个非常重要的运算符,用于获取数据类型或变量所占用的内存大小(以字节为单位)。以下是关于sizeof的使用方法和一些常见应用场景:

一、基本使用方法

1. 获取数据类型大小

可以直接将数据类型作为sizeof的操作数,来获取该数据类型在当前系统中的大小。例如:

printf("int类型大小:%lu字节\n", sizeof(int)); 
printf("double类型大小:%lu字节\n", sizeof(double));
printf("char类型大小:%lu字节\n", sizeof(char));
//输出结果分别为 4 8 1

这里使用%lu格式化输出,是因为sizeof的结果类型是size_t,在大多数平台上size_t是无符号长整型。输出结果会告诉你在当前系统中intdoublechar等数据类型各自占用的字节数。

2. 获取变量大小

也可以将变量名作为sizeof的操作数,来获取该变量所占用的内存大小。例如:

int num = 10;
printf("变量num的大小:%lu字节\n", sizeof(num));
  //输出结果为4

这会输出变量num所占用的内存大小,和获取int类型大小的结果是一样的,因为numint类型的变量。

二、应用场景

1. 动态内存分配

在使用动态内存分配函数(如malloccalloc)时,sizeof可以用来计算需要分配的内存大小。例如:

int* arr = (int*)malloc(10 * sizeof(int));

这里通过10 * sizeof(int)计算出分配一个包含10个int类型元素的数组所需的内存大小,并将其分配给指针arr。这样可以确保分配的内存大小与数组元素类型相匹配,避免内存溢出或浪费。

2. 数组操作

当需要对数组进行操作,如复制数组内容时,sizeof可以用来获取数组的总大小。例如:

int a[] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
   //计算数组长度 相当于strlen
	printf("%d", a[i]);

sizeof(a)获取数组a的总大小

3. 结构体和联合体大小计算

对于结构体和联合体,sizeof可以用来获取它们的大小。例如:

struct Student {
    int id;
    char name[20];
    double score;
};

printf("结构体Student的大小:%lu字节\n", sizeof(struct Student));

这会输出结构体Student的大小。结构体的大小通常是其各个成员大小之和再加上可能存在的填充字节(用于内存对齐)。而联合体的大小则是其最大成员的大小,因为联合体的所有成员共享同一块内存区域。

需要注意的是,sizeof的结果与编译器、系统架构等因素有关。例如,在32位系统和64位系统中,某些数据类型的大小可能会有所不同。所以在跨平台开发时,使用sizeof来获取数据类型或变量的大小是非常重要的,以确保程序的兼容性和正确性。


总结

C语言中,函数有四种形式:无参无返回值,如void fun(),简单输出;有参无返回值,像void fun(n),根据参数输出结果;无参有返回值,例如int fun();有参有返回值,如int fun(n),。这些形式满足不同需求。

sizeof运算符则用于获取数据类型或变量的内存大小。比如sizeof(int)获取int类型大小,sizeof(num)获取变量num大小。它在动态内存分配、数组操作、跨平台开发等场景中至关重要,帮助开发者精准掌控内存使用,确保程序稳定高效运行。掌握它们,让你的C语言编程如虎添翼!


网站公告

今日签到

点亮在社区的每一天
去签到