【C语言学习笔记】

C语言发展史:

  • 1960         原型A语言->ALGOL语言

  • 1963         CPL语言
  • 1967         BCPL
  • 1970         B语言
  • 1973         C语言

C语言特点:

  1. 基础性语言
  2. 语法简洁 紧凑 方便 灵活(得益于指针)
  3. 运算符 数据结构丰富
  4. 结构化 模块化编程
  5. 移植性好 执行效率高
  6. 允许直接对硬件操作

C语言学习建议:

  1. 概念的正确性
  2. 动手能力
  3. 主动阅读优秀的程序段
  4. 大量练习,面试题,编程是技术不是理论

C课程讲解思路:

  1. 基本概念
  2. 数据类型 运算符 表达式
  3. 输入输出
  4. 流程控制
  5. 数组
  6. 指针
  7. 函数
  8. 构造类型
  9. 动态内存管理
  10. 调试工具(gdb、make)和调试技巧
  11. 常用库函数

平台介绍:

        64位的redhat6,vim(编辑器),gcc(make)

hello.c:"Hello world"

#inlcude <stdio.h>
#include <stdlib.h>int main(void){printf("hello world!\n");exit(0);
}

编译器gcc:

C源文件->预处理->编译->汇编->链接->可执行文件

完整过程

  • 预处理
gcc -E hello.c > hello.i
  • 编译
gcc -S hello.i 
  • 汇编
gcc -c hello.s 
  • 链接->可执行文件
gcc hello.o -o hello

或者

gcc hello.c -o hello

又或者

make hello

执行

./hello

编辑器vim:

vim配置脚本以及常用快捷方式

一、基本概念

1、以helloworld为例对写程序的思路提出如下要求:

        1)头文件正确包含的重要性

                在c中,如果没有出现函数原型,就默认函数的返回值是int

#include <stdio.h>
#include <stdlib.h>//malloc存在的头文件
int main()
{int *num = (int *)malloc(sizeof(int));//包含头文件后就不需要强制类型装换了return 0;
}

        2)以函数为单位来进程程序编写

        3)声明部分+实现部分

        4)return 0;

        5)多用空格空行

        6)添加注释

1、
//2、
/*    */3、
/******/4、在预处理的时候不参与编译
#if 0#endif

2、算法:解决问题的方法(流程图、NS图、有限状态机FSM)

3、程序:用某种语言实现算法

4、进程:

5、防止写越界、防止内存泄漏、谁打开谁关闭、谁申请谁释放

二、数据类型、运算符和表达式

1、数据类型(基本数据类型)

  • 基本类型
    • 数值类型
      • 整型
        • 短整型 short
        • 整型 int
        • 长整型 long
      • 浮点型
        • 单精度型 float
        • 双精度型 double
    • 字符类型 char
  • 构造类型
    • 数组
    • 结构体 struct
    • 共用体 union
    • 枚举类型 enum
  • 指针类型
  • 空类型 void

        1)所占节数

        2)存储区别

整型数的存储都是以补码形式来进行存储的
254 -> unsigned int -> 32bit
-254 -> 取绝对值 254  -> 1111 1110 取反 + 1(254)10 = (1111 1110)2 = (376)8 = (FE)16254
B11111110(c不认识这个表示)
0376
0xFE浮点类型存储方式
0.314*10^1
0~32:0~22(23位):记录精度部分23~30(8位):存储指数部分31(1位):符号位字符类型
存储的是二进制形式(ASCII码表)0~127 前128个都是标准C规定的ASCII码值情况 128~255 是补充进来的
字符   十进制 十六进制
0      048     30
A      065     41
a      097     61

        3)不同类型的数据间进行转换(隐式、显式->强制类型转换)

        隐式

int i;
float f;
doubel d;
char ch;ch + i -> i
f -d -> d(ch + i) - (dloat -double) -> double

        4)特殊性:

                (1)布尔型bool

                        逻辑真、逻辑假

#incldue <stdio.h>
#include <stdlib.h>
#include <stdbool.h>int main() {bool a = false;printf("a = %d\n", a);exit(0);
}

                (2)float类型

                        浮点型的失真问题

int func(float f) {if (f < 0) {return -1;} else if (fabs(f-0) <= 1e-6) {return 0;} else {return 1;}
}

                (3)char型是否有符号

                        c中 char有无符号是未定义行为

                (4)不同形式的0值:0、‘0’、“0”、‘\0’

0(整形) '0'(字符常量) "0"(字符串常量) '\0'(字符常量)

                (5)数据类型与后续代码中所使用的输入输出要相匹配(防止自相矛盾)

#include <stdlib.h>
#include <stdio.h>int main() {unsigned int a;//无符号a = 1 << 31;printf("%ud", a);//无符号
}

2、常量与变量

1)常量:在程序执行过程中值不会发生变化的量

分类:整型常量、实型常量、字符常量、字符串常量、标识常量

  • 整形常量: 1 、52、752
  • 实型常量: 2.2 、3.14、1.9999
  • 字符常量(由单引号引起来的单个的字符转义字符): 'a'、'X'、'\t' 、'\n'、 '\0' 、'\015'(8进制)、 '\x7f' (16进制)、'\018'(错误的表示,八进制不会出现8!!)
  • 字符串常量(由双引号引起来的一个或多个字符组成的序列): ""(空串:尾0)、 "a" 、"abXYZ"、 "abc\n\021\018"(a b c \n \021 \0 1 8)
  • 标识常量:#define 宏名 宏体,处理在程序的预处理阶段,占编译时间,优点:一改全改,缺点:不检查语法,只是单纯的宏体与宏名之间的替换
#include <stdlib.h>
#include <stdio.h>#define PI 3.1415926
#define ADD 2+3
// 正确写法
//#define ADD (2+3)
int main() {printf("%f\n", PI);printf("%d\n", ADD * ADD);
}
#include <stdlib.h>
#include <stdio.h>#define MAX(a,b) ({typeof(a) A=a,B=b; ((A) > (B) ? (A) : (B));})int main() {int a = 3, b = 5;printf("%d\n",MAX(a++, b++));printf("%d\n",MAX(a++, b++));
}

         在程序的预处理阶段,占编译时间,不占运行时间(没有函数调用的消耗),但不检查语法(比较危险)

2)变量:用来保存一些特定内容,并且在程序执行过程中值随时会发生变化的量

 定义:[存储类型] 数据类型 标识符 = 值

                                   TYPE NAME = VALUE;

        标识符:由字母,数字,下划线组成且不能以数字开头的一个标识序列。写标识符尽量做到                           见名生义。

        数据类型:基本的数据类型+构造类型

        :注意匹配

        存储类型autostaticregisterextern(说明型)

                         auto: 默认,自动分配空间,自动回收空间

                         register :(建议型)寄存器类型,只能定义局部变量,不能定义全局变量,大小                                                     有限制,只能定义32位大小的数据类型,比如double就不可以。因为寄                                            存器没有地址,所以一个register类型的变量无法打印出地址查看或使用

                         static:静态型,自动初始化0值或空值,并且static变量的值有继承性。另外常                                         用来修饰一个变量或者函数(防止当前函数对外扩展)

#include <stdlib.h>
#include <stdio.h>void func() {static int x = 1;x++;printf("%d\n", x);
}int main() {func();func();func();
}2
3
4

                         extern: 说明型,意味着不能改变被说明的量的值或类型 可以用来扩展外部变量                                          的作用域

                                        main.c 

#include <stdio.h>
#include <stdlib.h>#include "proj.h"int i = 10;int main()
{printf("[%s]:i = %d\n",__FUNCTION__,i);func();exit(0);
}

                                        proj.c 

#include <stdio.h>
#include <stdlib.h>#include "proj.h"void func(void)
{printf("[%s]:i = %d\n",__FUNCTION__,i);exit(0);}

                                         proj.h

#ifndef PROJ_H__
#define PROJ_H__extern int i;
void func(void);#endif

变量的生命周期和作用范围

        (1)全局变量和局部变量

        (2)局部变量和局部变量

        (3)参考图片

3、运算符和表达式

表达式与语句的区别

表达式 i = 1   i= j*2
语句   i = 1; i= j*2;

运算符部分:

        1)每个运算符所需要的参与运算的操作数个数

        2)结合性

        3)优先级

        4)运算符的特殊用法

                如:%:必须是整数

        5)位运算的重要意义

自增、自减

运算符在前,先进行计算,再取变量值使用

变量在前,先取变量值使用,再进行计算

int i = 1, j = 2, value;
value = i++ + ++j

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL学习-无序容器-unordered set和unorderde multiset

1.定义及初始化 #include <unordered set> #include <iostream> using namespace std; //输出s中的所有元素 template<typename T> void Show(const T& s) { for(auto&x:s) cout << x<<" ";cout << endl; } int main()…

玩转Docker | Docker基础入门与常用命令指南

玩转Docker | Docker基础入门与常用命令指南 引言基本概念help帮助信息常用命令管理镜像运行容器构建镜像其他Docker命令整理结语引言 Docker 是一种开源的应用容器引擎,它允许开发者将应用程序及其依赖打包进一个可移植的容器中,然后发布到任何流行的 Linux 机器上。这大大简…

基于SSM医药进出口交易系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品信息管理&#xff0c;仓储部门管理&#xff0c;供应部门管理&#xff0c;业务部门管理&#xff0c;客户管理&#xff0c;财务部管理 业务部门账号功能包括&#xff1a;系统首页&#xff0c;个人中…

2024年大湾区杯粤港澳金融数学建模赛题浅析——助攻快速选题

一图流 赛题难度 A:B2:1 选题人数 A:B2:3 A题&#xff1a;证券市场投资风险控制模型设计 问题简述 随着金融市场的发展&#xff0c;系统性风险的管理变得越来越重要。本题要求通过量化方法测度和监测系统性风险&#xff0c;设计风险计量指标&#xff0c;并基于这些指标构建预…

胡壮麟《语言学教程》第五版PDF英文版+中文版翻译

胡壮麟《语言学教程》中文版&#xff1a;https://pan.quark.cn/s/9491130ec572 《语言学教程》&#xff08;英文版&#xff09;是一部经典的语言学教材&#xff0c;自 1988 年面世以来&#xff0c;被众多高校广泛采用&#xff0c;长销不衰。该教材自出版以来不断修订&#xff…

基于Pycharm和Django模型技术的数据迁移

1.配置数据库 在trip_server/settings.py中修改配置&#xff1a; 其格式可访问官网&#xff1a;Settings | Django documentation | Django 1.1 配置数据库 文件地址&#xff1a;trip_server/settings.py 配置前需要创建&#xff08;NaviCat&#xff09;个人数据库 "…

java访问华为网管软件iMaster NCE的北向接口

最近做的一个项目&#xff0c;需要读取华为一个叫iMaster NCE的网管软件的北向接口。这个iMaster NCE&#xff08;以下简称NCE&#xff09;用于管理项目的整个网络&#xff0c;尤其是光网络。业主要求我们访问该软件提供的对外接口&#xff0c;读取一些网络信息&#xff0c;比如…

InstructIR: High-Quality Image Restoration Following Human Instructions 论文阅读笔记

这是Radu大佬所在的Wrzburg大学的computer vision lab实验室发表在ECCV2024上的一篇论文&#xff0c;代码开源。文章提出了一种文本引导的All-in-One的restoration模型&#xff0c;如下图所示&#xff1a; 这个工作其实跟"InstructPix2Pix: Learning to Follow Image Edit…

【实用教程】.NET C# PDF 生成技术:哪种方法适合您的项目?

概述&#xff1a;本文介绍了 TX Text Control 真正的 WYSIWYG&#xff08;所见即所得&#xff09;模板系统所带来的独特优势&#xff0c;与传统的 PDF 生成系统&#xff08;如 HTML 到 PDF 转换器或需要自定义编程的 PDF 库&#xff09;相比&#xff0c;模板是可视化设计的&…

notepad++ compare插件的离线下载和安装

一、离线安装 去改地址找到最新的插件&#xff1a;https://github.com/notepad-plus-plus/nppPluginList/blob/master/doc/plugin_list_x64.md下载之后复制到插件文件夹&#xff0c;插件文件夹的打开方式如下 注意目录&#xff1a; 二、问题汇总 &#xff08;1&#xff09…

echarts地图,柱状图,折线图实战

1.地图 <template><div style"height: 100%;" class"cantainerBox"><div class"top"><div class"leftTop"><span class"firstSpan">推广进度</span><div>省份选择&#xff1a;&l…

HTB:Cicada[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行开放端口扫描 使用nmap对靶机开放端口进行脚本、服务信息扫描 首先尝试空密码连接靶机SMB服务 由于不知道账户名&#xff0c;这里我们使用crackmapexec对smb服务进行用户爆破 通过该账户连接至靶机SMB服务器提取敏感信…

张嘉译王海燕婚姻告急?17年长跑终落幕,真相究竟如何?

娱乐圈又一对金童玉女分道扬镳&#xff1f;在这个瞬息万变的娱乐圈里&#xff0c;爱情似乎总是来得快去得也快。近日&#xff0c;一则关于实力派演员张嘉译与妻子王海燕结束17年婚姻长跑的消息&#xff0c;如同一颗重标题&#xff1a;&#x1f494;张嘉译王海燕婚姻告急&#x…

我的电视 左侧列表内置版 | 非常高清,频道丰富的电视直播应用

我的电视是一款专注于电视直播的应用程序&#xff0c;提供丰富且全面的电视频道&#xff0c;包括央视及各大卫视。无论您是想看新闻、体育、电影还是综艺节目&#xff0c;都可以在这里找到。应用支持高清画质播放&#xff0c;确保流畅无卡顿的观看体验。简洁的界面设计和智能推…

Conmi的正确答案——在Kibana中进入Elasticsearch的索引管理页面

Elasticsearch版本&#xff1a;7.17.25 Kibana版本&#xff1a;7.17.25 注&#xff1a;索引即类似mysql的表。 0、进入首页 1、未创建任何“索引模式”时&#xff1a; 1.1、点击左边的三横菜单&#xff1b; 1.2、点击“Discover”&#xff0c;进入“发现”页面&#xff1b; 2…

在线体验Sketch中文版,免费下载即刻上手!

Sketch是一款轻量而高效的矢量设计工具&#xff0c;助力全球设计师创造了诸多惊艳作品。安装Sketch的优势主要体现在其矢量编辑、控件和样式功能上。而下载安装“Sketch中文版”即时设计同样出色&#xff0c;它作为一站式设计平台&#xff0c;功能更全面。即时设计拥有纯中文的…

aws(学习笔记第九课) 使用AWS的网络存储EBS

aws(学习笔记第九课) 使用AWS的网络存储EBS 学习内容&#xff1a; 使用AWS的网络存储EBS 1.使用AWS的网络存储EBS EBS是什么 EBS是aws Elastic Block Store的缩写&#xff0c;就是AWS的弹性数据块存储。EBS有如下特点。 它不属于EC2的一部分&#xff0c;独立存在。可以独立存…

DAY67WEB 攻防-Java 安全JNDIRMILDAP五大不安全组件RCE 执行不出网

知识点&#xff1a; 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类&#xff1a; Groovy Runti…

11-Python基础编程之错误和异常

Python基础编程之错误和异常 概念错误异常 常见的系统异常异常的解决预防捕捉处理异常with语句 手动抛出异常自定义异常 概念 错误 可以通过代码进行修复&#xff1b; 异常 需要提前考虑&#xff0c;设定限制条件&#xff1b;不能通过代码进行修复&#xff1b; 常见的系…

鸿蒙开发融云demo发送图片消息

鸿蒙开发融云demo发送图片消息 融云鸿蒙版是不带UI的&#xff0c;得自己一步步搭建。 这次讲如何发送图片消息&#xff0c;选择图片&#xff0c;显示图片消息。 还是有点难度的&#xff0c;好好看&#xff0c;好好学。 一、思路&#xff1a; 选择图片用&#xff1a;photoVie…