C高级编程笔记

提升方向:

1. **深入理解指针**: 


   指针的高级用法,包括指针的指针、函数指针、指针与数组、指针与结构体的深入应用等。

指针数组:本质是数组

1.指针数组的每个元素都是一个一级指针,每个元素都有自己独立的内存地址

2.应用于字符串数组或者动态数组中

	const char* str[3] = { "abc", "123", "..." };

	for (int i = 0; i < sizeof(str)/sizeof(char *) i++)
	{
		cout << str[i] << endl;
	}

数组指针:本质是指针

1.数组指针指向第一个数组,每个元素都是一个数组

2.简化多维数组的操作和访问

3.函数参数传递,使函数能够接收多个维度的参数,如果实参是一个二维数组的话,形参可以用数组指针去接收

void prit(int (*str)[3], int rows)
{
	for (int i = 0; i < rows; ++i) {
		for (int j = 0; j < 3; ++j) {
			cout << str[i][j] << " ";
		}
		cout << endl;
	}
}

int main()
{
	int str[2][3] = { {1,2,34}, {2,3,5}};
	prit(str, 2);
	return 0;
}

指针函数:本质是函数,返回值类型是指针,修改返回值类型的

1.用于返回动态内存分配的返回内存指针

2.链表操作,用于返回新节点或者链表后的节点

3.字符串操作,返回字符串地址

#include <stdio.h>
#include <stdlib.h>
int* mymalloc()
{
	int* ptr = (int*)malloc(sizeof(int)*5);
	if (ptr == NULL)
	{
		return NULL;
	}
	return ptr;
}
int main()
{
	int* nptr = mymalloc();

	for (int i = 0; i< 5; i++)
	{
		nptr[i] = i;
		printf("%d ", nptr[i]);
	}
	free(nptr);
	nptr = NULL;
	return 0;
}

函数指针:本质是指针,

1.用于回调函数中,一个函数调用另外一个

2.动态函数选择,可以在运行中动态选择哪个函数运行,配合函数数组使用

3.函数指针可以替代繁琐的Switch-case的使用,简化代码结构

回调函数例程,使用函数指针调用,使用回调机制
#include <iostream>
// 函数声明
void greetEnglish();
void greetSpanish();
void greetChinese();
// 定义函数指针类型
typedef void (*GreetFunction)();
void executeGreet(GreetFunction func) {
    func();  // 调用函数指针指向的函数
}
int main() {
    // 定义函数指针并赋值
    GreetFunction greet = greetEnglish;
    // 使用函数指针调用函数
    greet();

    // 修改函数指针指向的函数
    greet = greetSpanish;
    greet();

    // 使用回调机制
    executeGreet(greetChinese);

    return 0;
}
void greetEnglish() {
    std::cout << "Hello!" << std::endl;
}
void greetSpanish() {
    std::cout << "Hola!" << std::endl;
}
void greetChinese() {
    std::cout << "你好!" << std::endl;
}
动态函数选择
替代Switch - case
当然对于那种case里面只是一句话的就没必要用了,因为你也要创建大量的函数体
#include <stdio.h>

// 定义函数指针类型
typedef int (*operation_func)(int, int);

// 各种运算函数
int add(int a, int b) {
    return a + b;
}
int subtract(int a, int b) {
    return a - b;
}
int multiply(int a, int b) {
    return a * b;
}
int divide(int a, int b) {
    return a / b;
}
int main() {
    int a = 10, b = 5;
    const char operator = '+';
    // 函数指针数组
    operation_func operations[256] = { NULL };
    // 初始化函数指针数组
    operations['+'] = add;
    operations['-'] = subtract;
    operations['*'] = multiply;
    operations['/'] = divide;

    // 选择并调用相应的函数
    if (operations[(int)operator] != NULL) {
        int result = operations[(int)operator](a, b);
        printf("Result: %d\n", result);
    }
    else {
        printf("Invalid operator\n");
        return 1;
    }

    return 0;
}

结构体函数指针:功能函数列表

?????

值传递:

指针传递:

//指针传递
void fun(int *a, int *b)
{
	int temp = 0;
	temp = *a;
	*a = *b;
	*b = temp;
	cout << "a=" << *a << endl << "b=" << *b << endl;
}

//值传递
void fun(int a, int b)
{
	int temp = 0;
	temp = a;
	a = b;
	b = temp;
	cout << "a=" << a << endl << "b=" << b << endl;
}

2. **动态内存管理**:


   深入了解动态内存分配、管理和优化。掌握 `malloc`, `calloc`, `realloc` 和 `free` 函数的使用,以及如何避免内存泄漏和碎片化。

3. **结构体**:

typedef struct{

int a;

int b;

char c;

}BASE;

BASE b = {

.a=100,

.b=20,

.c='a'

};

4. **算法优化**:


   实现和优化各种算法,如排序算法、搜索算法、递归算法等。

5. **模块化和面向抽象编程**:


   学习如何设计模块化的代码,使用抽象数据类型(ADT)和封装来提高代码的重用性和可维护性。

6. **系统级编程**:


   包括与操作系统交互的编程,使用系统调用,进行进程管理、文件操作、信号处理等。

7. **多线程和并发编程**:


   在C语言中使用多线程库如 POSIX Threads (pthreads) 进行并发编程,理解线程的创建、同步和通信机制。

10. **优化技术**:


    学习使用编译器优化选项,理解编译器是如何处理你的代码的,以及手动优化代码的技巧。

11. **嵌入式和底层编程**:


    对硬件接口编程,包括嵌入式系统中的C语言编程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值