函数

  • strcmp函数:依次比较字符数组中的每一个元素,数组可隐式转换为指针,因此该函数的参数可用数组表示

若第一个参数字符小于第二个参数字符,则返回<0

若第一个参数字符大于第二个参数字符,则返回>0

若两个字符串相等,则返回0

  • 字符大小比较(字典序):

依次取两个字符串的对应字符,若两个字符能区分出大小,则字符串也可区分出大小;若两个字符不能区分大小,则            依次取下一字符进行比较

  • 函数的形参是实参的副本

实参复制后,副本变为了形参,对形参的改变并不影响实参。

   eg:

#include <stdio.h>
#include <stdlib.h>

void Swap(int x, int y){
	int tmp;
	tmp = x;
	x = y;
	y = tmp;
	printf("a=%d  地址为%p\nb=%d  地址为%p\n", x, &x, y, &y);
}

int main(){
	int a = 10;
	int b = 20;
	Swap(a, b);
	printf("a=%d  地址为%p\nb=%d  地址为%p\n", a, &a, b, &b);
	system("pause");
	return 0;
}

由运行结果可知,形参和实参的地址不同,因此swap函数无法交换a、b。

   改正后:

#include <stdio.h>
#include <stdlib.h>

void Swap(int* x, int* y){    //x变量类型为int型指针
	int tmp;
	tmp = *x;     //解引用
	*x = *y;
	*y = tmp;
    printf("a=%X \nb=%X\n", x, y);
}

int main(){
	int a = 10;
	int b = 20;
	Swap(&a, &b);
	printf("a=%d  地址为%p\nb=%d  地址为%p\n", a, &a, b, &b);
	system("pause");
	return 0;
}

解引用:根据内存地址,获取到地址中的数据内容

x,y中存放的是a,b的地址

  • 输出型参数

一个函数想返回多个值,配合输出型参数,完成多个参数的返回

   示例代码:

#include <stdio.h>
#include <stdlib.h>

int Divide(int x, int y, int* success){
	if (y == 0){
		success = 0;
		return 0;
	}
	success = 1;
	return x/y;
}

int main(){
	int success=0;
	int ret = Divide(10, 5, &success);
	printf("ret=%d,success=%d\n", ret,success);
	system("pause");
	return 0;
}
  • 嵌套调用:函数中调用其他函数
  • 链式访问:一个函数的返回值作为另一个函数的参数
  • 将函数声明写在头文件中,将函数定义写在一个.c文件中,则可在其他.c文件中调用该函数
//""表示从当前工程的目录中查找头文件
#include "test.h"
//<>表示从系统目录中查找头文件
#include <stdio.h>

函数可以声明多次,但只能定义一次

C语言中的头文件,只能被包含一次

  • 通过预编译指令完成头文件只包含一次的控制
#ifndef  __TEST__  //如果没定义
#define  __TEST__  //定义
void Func(int x);
#endif

或者写成:

#pragma once
void Func(int x);
  • 函数递归

函数调用自身,函数A调用完函数B之后,会在之前的调用位置继续往下执行代码

解决问题,往往既可以使用递归方式,也可使用循环的方式。递归方式,代码通常更直观更简单,但运行效率可能会较低;循环方式,代码通常更繁琐,但是运行效率可能会较高

     练习:接受一个整型值(无符号),按照顺序打印它的每一位。 例如: 输入:1234,输出 1 2 3 4.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void Print(int x){
	if (x > 9){    //x不是个位数
		Print( x / 10);
	}
	printf("%d ", x % 10);
}

int main(){
	int i;
	printf("请输入一个数:\n");
	scanf("%d", &i);
	Print(i);
	printf("\n");
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值