当前位置: 首页 > news >正文

C/C++复习-- C语言初始基础

C语言初始基础

本文结合代码实例与理论解析,系统讲解C语言的核心知识点,涵盖数据类型、控制结构、函数、指针、结构体等核心内容,并辅以常见错误分析进阶技巧。通过对比文件一代码与文件二理论,帮助初学者构建完整的C语言知识框架。


一、C语言基础与第一个程序

1. C语言简介

  • 定位:通用编程语言,适合底层开发(如操作系统、嵌入式)。
  • 特点:高效、跨平台、面向过程。
  • 标准:最新标准为C11,支持Unicode字符。

2. 第一个程序:打印"Hello Bit"

#include <stdio.h>
int main() {printf("Hello Bit\n");  // \n为换行符return 0;               // 返回值0表示正常退出
}
  • 关键点
    • main函数是唯一入口,必须存在且仅有一个。
    • #include <stdio.h>引入标准输入输出库,支持printf函数。

二、数据类型与变量详解

1. 基础数据类型

#include <stdio.h>
int main() {printf("char大小: %d字节\n", sizeof(char));    // 1printf("long大小: %d字节\n", sizeof(long));    // 4(32位)或8(64位)printf("double大小: %d字节\n", sizeof(double));// 8return 0;
}
  • 类型选择
    • int存储整数(如年龄),float存储单精度浮点数(如价格)。
    • longlong long用于大整数,double用于高精度计算。

2. 变量与常量

  • 变量定义
    int age = 20;              // 变量可修改
    const float PI = 3.14f;    // const修饰的常变量(不可修改)
    #define MAX 100            // 宏常量(预处理阶段替换)
    
  • 作用域与生命周期
    • 全局变量:整个程序有效,生命周期与程序一致。
    • 局部变量:仅在代码块内有效,退出代码块后销毁。

三、控制结构:选择与循环

1. 选择语句(if-else)

#include <stdio.h>
int main() {int input;printf("是否好好学习?(1/0): ");scanf("%d", &input);     // 输入赋值给inputif (input == 1) {printf("好offer\n");  // 条件为真执行} else {printf("卖红薯\n");    // 条件为假执行}return 0;
}
  • 注意事项scanf需使用&取变量地址。

2. 循环语句(while)

#include <stdio.h>
int main() {int line = 0;while (line < 20000) {   // 循环条件printf("敲代码第%d行\n", line + 1);line++;              // 修改循环变量}printf("达成目标,获得好offer!\n");return 0;
}
  • 循环控制break跳出循环,continue跳过本次循环。

四、函数与数组实战

1. 自定义函数

#include <stdio.h>
int Add(int x, int y) {      // 函数定义return x + y;
}
int main() {int sum = Add(10, 20);   // 函数调用printf("sum = %d\n", sum); // 输出:30return 0;
}
  • 函数优势:代码复用、模块化开发。

2. 数组操作

#include <stdio.h>
int main() {int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("%d ", arr[i]); // 输出:1 2 3 4 5}return 0;
}
  • 关键点
    • 数组下标从0开始,访问越界会导致未定义行为。
    • 字符串数组需以\0结尾,否则可能打印乱码(见下文错误分析)。

五、指针与内存管理

1. 指针基础

#include <stdio.h>
int main() {int num = 10;int *p = &num;   // 定义指针并指向num的地址*p = 20;        // 通过指针修改值printf("num = %d\n", num); // 输出:20return 0;
}
  • 核心概念
    • &取地址,*解引用。
    • 指针大小:32位系统为4字节,64位系统为8字节。

2. 指针与数组

#include <stdio.h>
int main() {int arr[3] = {10, 20, 30};int *p = arr;            // 数组名即首元素地址printf("第二个元素:%d\n", *(p + 1)); // 输出:20return 0;
}

六、结构体与高级特性

1. 结构体定义

#include <stdio.h>
struct Student {char name[20];int age;float score;
};
int main() {struct Student s = {"张三", 18, 95.5};printf("姓名:%s,年龄:%d,分数:%.1f\n", s.name, s.age, s.score);return 0;
}
  • 结构体指针
    struct Student *ps = &s;
    printf("姓名:%s\n", ps->name); // ->操作符访问成员
    

2. 枚举常量(enum)

#include <stdio.h>
enum Week { Mon=1, Tue, Wed }; // 默认从0开始,此处Mon=1
int main() {printf("周一:%d\n", Mon);  // 输出:1printf("周二:%d\n", Tue);  // 输出:2return 0;
}

七、常见错误与调试技巧

1. 格式化输出错误

long num = 100;
printf("%d\n", num); // 错误!应使用%ld
  • 修正printf("%ld\n", num);

2. 字符串缺失结束符

char arr[] = {'a', 'b', 'c'}; 
printf("%s\n", arr); // 可能输出乱码(缺少\0)
  • 修正char arr[] = {'a', 'b', 'c', '\0'};

3. 未初始化指针

int *p;             // 野指针
*p = 10;            // 导致程序崩溃
  • 修正:始终初始化指针,如int *p = NULL;

八、进阶技巧与总结

1. 宏定义与条件编译

#define DEBUG 1
#if DEBUGprintf("调试模式\n"); // 根据DEBUG值控制代码块
#endif

2. static关键字

  • 修饰局部变量:延长生命周期至程序结束。
  • 修饰全局变量/函数:限制作用域为当前文件。
void test() {static int count = 0; // 仅初始化一次count++;printf("调用次数:%d\n", count);
}

3. 总结

  • 核心重点:理解数据类型、内存管理和指针。
  • 学习建议:多实践,使用调试工具(如GDB),阅读经典代码(如Linux内核片段)。

通过本文,读者可系统掌握C语言的核心语法与实战技巧。建议结合代码示例动手编写程序,逐步深入理解底层机制。

相关文章:

  • 物联网之使用Vertx实现MQTT-Server最佳实践【响应式】
  • Spring事务管理实现机制
  • Halcon检测项目
  • 深入浅出之STL源码分析3_类模版实例化与特化
  • Shell 脚本编程1(常用命令+概述)
  • 金丝猴食品:智能中枢AI-COP构建全链路数智化运营体系
  • C++ 异常捕获 try 和 __try的区别笔记
  • Python环境搭建指南
  • 慈缘基金会“蝴蝶飞”助西藏女孩白玛卓嘎“折翼重生”
  • 基于STM32的居家环境监测报警Proteus仿真+程序设计+设计报告+讲解视频
  • smbd:快速拉取服務端SMB共享文件脚本工具
  • SAM详解3.2(关于2和3的题)
  • 黑马k8s(二)
  • 子串简写(JAVA)一维前缀和, 蓝桥杯
  • 学习黑客5 分钟深入浅出理解cron [特殊字符]
  • 基于阿伦尼斯模型的电池寿命预测:原理、应用与挑战
  • 【智能指针】
  • SD06_前后端分离项目部署流程(采用Nginx)
  • SAP Commerce(Hybris)开发实战(一)
  • linux-----------Ext系列⽂件系统(上)
  • 如何自建网站服务器/设计网站大全
  • 网站建设数据库代码/站长之家域名查询官网
  • 什么网站做h5不收费/比较开放的浏览器
  • 沈阳怎么做网站/泉州百度推广排名优化
  • 网络域名多少钱一年/深圳网站seo优化
  • 哈尔滨网站建设贴吧/域名批量查询系统