后端
C语言函数与指针
1. 函数基础
函数定义:函数的实现部分
- 语法格式:
返回类型 函数名(参数列表) { 函数体 } - 示例:
int add(int a, int b) { return a + b; }
- 语法格式:
函数声明:函数的原型声明
- 语法格式:
返回类型 函数名(参数列表); - 示例:
int add(int a, int b);
- 语法格式:
函数调用:执行函数的过程
- 语法格式:
函数名(实参列表); - 示例:
int result = add(3, 5);
- 语法格式:
主函数:程序的入口点
- 语法格式:
int main() { 函数体 return 0; } - 示例:
int main() { printf("Hello World\n"); return 0; }
- 语法格式:
======================================================
2. 函数进阶
值传递:传递参数的值副本,函数内修改不影响原值
- 语法格式:
void function(int x) { x = 10; } - 示例:
int a = 5; function(a); // a 仍为 5
- 语法格式:
地址传递:传递参数的地址,函数内修改会影响原值
- 语法格式:
void function(int *x) { *x = 10; } - 示例:
int a = 5; function(&a); // a 变为 10
- 语法格式:
指针函数:返回指针的函数
- 语法格式:
类型 *函数名(参数列表) { 函数体 } - 示例:
int *create_array(int size) { return (int *)malloc(size * sizeof(int)); }
- 语法格式:
函数指针:指向函数的指针
- 语法格式:
返回类型 (*指针名)(参数列表); - 示例:
int (*func_ptr)(int, int) = &add; int result = func_ptr(3, 5);
- 语法格式:
======================================================
3. 指针
指针定义:声明指针变量
- 语法格式:
类型 *指针名; - 示例:
int *p;
- 语法格式:
取地址:获取变量的内存地址
- 语法格式:
&变量名 - 示例:
int a = 10; int *p = &a;
- 语法格式:
解引用:通过指针访问变量值
- 语法格式:
*指针名 - 示例:
int value = *p;
- 语法格式:
空指针:不指向任何有效内存的指针
- 语法格式:
NULL - 示例:
int *p = NULL;
- 语法格式:
野指针:指向无效内存的指针
- 说明:未初始化的指针
- 示例:
int *p; // 野指针
指针运算:指针的加减操作
- 语法格式:
指针 ± 整数 - 示例:
int *p = arr; p++; // 指向下一个元素
- 语法格式:
指针数组:存储指针的数组
- 语法格式:
类型 *数组名[大小]; - 示例:
int *p[5]; // 存储5个int指针的数组
- 语法格式:
数组指针:指向数组的指针
- 语法格式:
类型 (*指针名)[大小]; - 示例:
int (*p)[5]; // 指向包含5个int的数组
- 语法格式:
多级指针:指向指针的指针
- 语法格式:
类型 **指针名; - 示例:
int **pp; // 指向int指针的指针
- 语法格式:
======================================================
4. 指针代码示例
c
#include <stdio.h>
int main() {
// 基本指针操作
int a = 10;
int *p = &a;
printf("变量a的值: %d\n", a);
printf("变量a的地址: %p\n", &a);
printf("指针p的值: %p\n", p);
printf("通过指针访问a的值: %d\n", *p);
// 通过指针修改变量值
*p = 20;
printf("修改后a的值: %d\n", a);
// 指针运算
int arr[] = {1, 2, 3, 4, 5};
int *arr_p = arr; // 数组名本身就是指针
printf("\n数组元素:");
for (int i = 0; i < 5; i++) {
printf(" %d", *(arr_p + i));
}
printf("\n");
// 指针数组
int *p_arr[3];
int b = 100, c = 200, d = 300;
p_arr[0] = &b;
p_arr[1] = &c;
p_arr[2] = &d;
printf("\n指针数组元素:");
for (int i = 0; i < 3; i++) {
printf(" %d", *p_arr[i]);
}
printf("\n");
return 0;
}代码说明
- 基本指针操作:声明指针变量,获取变量地址,通过指针访问和修改变量值
- 指针运算:使用指针遍历数组元素
- 指针数组:创建存储指针的数组,并通过指针数组访问多个变量
这个示例展示了指针的基本用法,包括指针的声明、赋值、解引用、指针运算和指针数组的使用。
======================================================
5. 头文件模板
5.1 头文件结构
头文件保护:
#ifndef、#define、#endif- 示例:
#ifndef EXAMPLE_H
- 示例:
包含头文件:
#include- 示例:
#include <stdio.h>
- 示例:
宏定义:
#define- 示例:
#define MAX_SIZE 100
- 示例:
类型定义:
typedef- 示例:
typedef unsigned int uint;
- 示例:
函数声明:返回类型 + 函数名 + 参数列表
- 示例:
int add(int a, int b);
- 示例:
全局变量声明:
extern- 示例:
extern int global_counter;
- 示例:
5.2 头文件示例
c
#ifndef EXAMPLE_H
#define EXAMPLE_H
#endif