C语言的函数和结构体

本文介绍了C语言中的函数和结构体的使用。在Xcode中创建Cocoa Touch Class来实践,详细讲解了四种函数类型:无参数无返回值、无参数有返回值、有参数有返回值的函数,并提供了示例。同时,讨论了函数声明的灵活性和注意事项,包括形参的不同用法。接着,解释了结构体作为自定义数据类型的概念,展示了结构体的定义、重定义、成员访问和赋值。最后,给出了军人信息结构体的例子,演示了如何打印结构体变量并修改其成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们学了C语言中的函数和结构体。

关于C语言的函数与结构体可以在Xcode中新建File,再选择iOS中的Cocoa Touch Class,新建后缀为'.h'和'.m'

1.函数的声明,与结构体的声明需要在'.h'中声明;也可在主函数文件'main.m'中的主函数前声明。


2.函数一共有四种形式:

(1).无参数无返回值类型函数: 例如, void Hello();

(2).无参数有返回值类型函数: 例如, void printSum(int value1, int value2);

(3).有参数有返回值类型函数: 例如, int getCount();

(4).有参数有返回值类型函数: 例如, int SumValue(int val1, int val2);


// 注意: 

(1).无返回值类型函数也可以添加return, 终止函数; 但是有返回值类型的函数必须有return。return后面的数据返回给主调函数(那个函数调用函数,谁就是主调函数, 一般在主函数中)。

(2).参数的写法:  数据类型 + 参数名(形式参数, 称为形参); 多个参数用逗号隔开。每个形参前都需要声明数据类型。

(3).函数声明的模版:

(I)函数声明内形参可以与函数定义的形参不同

int middleValue(int x, int y, int z);

(II)函数声明内形参可以不写

int middleValue(int, int, int);

(III)但是函数声明的形参类型不能省略

int middleValue(int a, int b, int c);

(4).函数的返回值可以像普通变量一样使用。调用的时候传入的数据成为实参,实参可以写常量或常量表达式,也可以写变量。传参过程中, 实参前面不要加类型


例题1: 编写函数,返回三个整数的中间数。

int middleValue(int a, int b, int c)

{

    // 先求出三个数的最大值

    int max = a > b ? a : b;

    max = max > c ? max : c;

    // 再求出三个数的最小值

    int min = a < b ? a : b;

    min = min < c ? min : c;

    return a + b + c - max - min;   

}

// 主函数

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

    int mid = middleValue(1, 9, 4);

    printf("middle = %d\n", mid);

    return 0;

}


3.在主函数中使用'.h'和'.m', 需要导入文件
#import "MYFunction.h"

// #import "自己写的文件" import<系统的文件>


4.函数声明与函数实现中函数声明的格式与函数名都要相同。

在主函数里函数外定义的变量为全局变量,在函数内定义为局部变量。

// 在函数体里面不能定义其他函数,能调用函数

//如果函数内有一个局部变量与全局变量名称相同,则调用的时局部变量

5.**结构体是一种自定义的数据类型

// struct关键字声明一个结构体

// 注意: struct + 结构体名字为变量类型

// 初始值的顺序与声明结构体内的成员顺序一致


6.结构体重定义的两种方法:

(1)

// 想把struct soilder类型重新定义为Soilder

// 结构体重新定义的第一种方式

typedef struct soilder Soilder;

(2)

// size结构体重新定义为MySize

// 结构体重新定义的第二种方式

struct size {

    int width;

    int height;

}MySize;


7.打印一个结构体变量

// 参数的写法

// 从规范上来讲,不应该省略函数声明

// 函数声明

void printStruct(Soilder s);

// 函数实现

void printStruct(Soilder s)

{

    // 函数内可以直接访问形参的成员

    printf("%-10s %-10s %-2s\n", s.name, s.rank, s.bloodType);

}

8.结构体访问成员

// 引入一个新的操作符'.'

// 先找到结构体变量Soilder,再通过'.'操作符访问name的成员

9.结构体变量可以直接赋值

// Soilder s5 = s4;


10.例题: 军人的信息

// 定义一个结构体

struct soilder {

    char name[20];

    // 军衔

    char rank[20];

    // 血型

    char bloodType[3];

};

// 想把struct soilder类型重新定义为Soilder

typedef struct soilder Soilder;

// 函数声明

void printStruct(Soilder s);

// 函数实现

void printStruct(Soilder s)

{

    // 函数内可以直接访问形参的成员

    printf("%-10s %-10s %-2s\n", s.name, s.rank, s.bloodType);

}

// 主函数

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

  Soilder s1 = {"项羽", "元帅", "B"};

  Soilder s2 = {"关羽", "上将", "O"};

  Soilder s3 = {"张苞", "少校", "A"};

  Soilder s4 = {"大嘴", "伙夫", "AB"};   

  // 结构体数组内存放的都是结构体变量

  Soilder array[4] = {s1, s2, s3, s4};

    

// 先找到结构体变量 array[3]

// 通过结构体变量找到血型的成员 array[3].bloodType

// array[3].name是什么 ----> name字符串的首地址

   printf("%s\n", array[3].name);

// 修改name这个字符串--->改成张三

    strcpy(array[3].name, "张三");

// array[3].name = "张三"; 错误的 字符串的修改需要用到字符串相关函数

// 调用打印结构体数组的函数

   printArray(array, 4);

   return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值