【C语言】全网最强函数(详解)(二)

简介: 【C语言】全网最强函数(详解)(二)

4. 函数的调用


4.1 传值调用

函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。


例子

#include <stdio.h>
void Swap1(int* px, int* py)
{
  int* tmp = px;
  px = py;
  py = tmp;
}
int main()
{
  int a = 10;
  int b = 20;
  int* p = &a;
  int* q = &b;
  printf("交换前:a=%d b=%d\n", a, b);
  Swap1(p,q);   //该为传值调用,虽然该代码打不出效果
  printf("交换后:a=%d b=%d\n", a, b);
  return 0;
}


4.2 传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。

这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操

作函数外部的变量。


例子

#include <stdio.h>
void Swap2(int* pa, int* pb)
{
  int* tmp = *pa;
  *pa = *pb;
  *pb = tmp;
}
int main()
{
  int a = 10;
  int b = 20;
  printf("交换前:a=%d b=%d\n", a, b);
  Swap2(&a, &b);    //传址调用
  printf("交换后:a=%d b=%d\n", a, b);
  return 0;
}


5. 函数的嵌套调用和链式访问


函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。


5.1 嵌套调用

#include <stdio.h>
void new_line()
{
  printf("hehe\n");
}
void three_line()
{
  int i = 0;
  for (i = 0; i < 3; i++)
  {
  new_line();
  }
}
int main()
{
  three_line();
  return 0;
}


函数可以嵌套调用,但是不能嵌套定义。


5.2 链式访问

把一个函数的返回值作为另外一个函数的参数。

#include <stdio.h>
#include <string.h>
int main()
{
  //int len = strlen("abcdef");//这里介绍一下strlen函数
  //printf("%d\n", len);
  //printf("%d\n", strlen("abcdef"));
  printf("%d", printf("%d", printf("%d", 54)));//结果为5421
  return 0;
}


6. 函数的声明和定义


6.1 函数声明:

告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数

声明决定不了。

函数的声明一般出现在函数的使用之前。要满足先声明后使用。

函数的声明一般要放在头文件中的。


6.2 函数定义:

函数的定义是指函数的具体实现,交待函数的功能实现。


声明与定义的解释

在这里插入代码片int a;//变量的声明
int main()
{
  printf("%d\n", a);
  return 0;
}
int a = 10;//定义
int a;//定义
int main()
{
  printf("%d\n", a);
  return 0;
}
变量还是函数都得满足先定义(声明)后使用
函数的声明
int Add(int x, int y);
int main()
{
  int a = 10;
  int b = 20;
  int c = Add(a, b);
  printf("%d\n", c);
  return 0;
}
//函数的定义
int Add(int x, int y)
{
  return x + y;
}
函数的定义
int Add(int x, int y)
{
  return x + y;
}
int main()
{
  int a = 10;
  int b = 20;
  int c = Add(a, b);
  printf("%d\n", c);
  return 0;
}
#include "add.h"
#pragma comment(lib, "add.lib")
int main()
{
  int a = 10;
  int b = 20;
  int c = Add(a, b);
  printf("%d\n", c);
  return 0;
}
相关文章
|
5天前
|
C语言
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
|
1天前
|
Java C语言 C++
定义C语言的int main()函数
定义C语言的int main()函数
|
4天前
|
C语言
C语言prinf函数
C语言prinf函数
11 4
|
2天前
|
存储 移动开发 C语言
技术心得记录:嵌入式开发中常用到的C语言库函数
技术心得记录:嵌入式开发中常用到的C语言库函数
|
4天前
|
编译器 程序员 Serverless
函数(C语言)
函数(C语言)
|
4天前
|
机器学习/深度学习 C语言
详细解读C语言math.h中常用函数
详细解读C语言math.h中常用函数
|
4天前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
4天前
|
存储 C语言
c语言scanf函数用法
c语言scanf函数用法
|
5天前
|
C语言
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
7 1
|
2天前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
9 0