C语言基础知识概况

article/2025/10/2 4:13:17

一、什么是C语言

就如人的语言分汉语英语,作用是实现人与人之间的交流相同。C语言是一门计算机语言。实现人与计算机交互的一种语言。C语言是一门广泛用于底层开发的编程语言

计算机的结构自上而下大概分为以下几层

应用软件QQ、网盘
用户
操作系统windows、Linux
硬件裸机

其中Linux操作系统就是用C语言写的。

计算机语言经历了由高级语言 机器语言 B语言 C语言的进步。虽然现在出现了很多语言,类如JAVA、Pathon、PHP...但是,作为一个能与计算机底层直接交互的语言,我认为C是学习计算机语言的必修课。

C语言能实现人机交互的方法是:编译器将C语言转换成汇编语言,汇编语言编译成机器指令

C语言的入口是由main函数进入的。(在一个程序中,main函数有且只有一个)

二、C语言的数据类型

char 、short 、int 、long 、float、double...组成C语言的基本数据类型

在32位操作系统下,可以用sizeof操作符来查出它们都占多少字节:

如图显示的是在vs2019环境下的情况,需要注意的是,在Linux环境下,long的值可能会发生改变,但仍满足sizeof(long) >= sizeof(int)

 三、变量和常量

3.1.1变量

变量描述变化的概念,不变的用常量表示。变量例如:float weight = 55.5f

全局变量与局部变量是容易混淆的点,下面用代码来解释下它们的不同。

 这里面,107行代码的a=10就是全局变量,它虽然不在main函数中定义,但是依然可以直接用。

 但是,如果在定义全局变量的情况下,我们依然可以在函数{}内部定义a的值。这时候输出的a的值采用局部优先原则

3.1.2变量的作用域和生命周期

局部变量 的作用域是变量所在的局部范围

全局变量 的默认作用域是整个程序        一个全局变量,在不给初始化的时候,默认值为0

还用上面的代码来说就是:a=10这个全局变量,也可以用到这个程序的其他函数中去,不仅仅可以在主函数中使用。

 3.2 常量

一般来说,我们编程者自己设置的量就算常量,但是有三种特殊情况的常量

①:const修饰的常变量,怎么说呢。const 修饰的常变量 具有常属性,但本质上是一个变量。

意思就是,程序员不能通过直接改变const修饰的常量。但是有可能通过其他方法改变

#include<stdio.h>
int main()
{char arr[4];const int a = 0;arr[4] = 97;printf("%d\n",a);return 0;
}//这里面,a在内存中的位置其实就是arr[5],就算它把a变成97了,但是不是通过直接赋值的方法改变的a的值

②:#define定义的标识符常量

③:枚举常量 

enum Sex
{MALE,FAMALE,SECRET
};int main()
{printf("%d\n", MALE);            //0printf("%d\n", FAMALE);          //1  printf("%d\n", SECRET);          //2  return 0;
}

枚举类型默认是从第一项为0开始的,不过可以自己设置首项值,如:这里MALE为5的话,FAMALE与SECTRET的值就为6和7。

 四、转义字符

 需要注意的是最后两个。

 

 五、选择语句、循环语句

5.1选择语句

简单的选择语句if、else,举个栗子:好好学习好工作,不好好学习卖红薯。

int main()
{int input = 0;printf("你要好好学习么?(1/0):");scanf("%d", &input);if (1 == input)printf("好offer\n");elseprintf("卖红薯\n");return 0;
}

5.2循环语句

敲100000行代码成为大牛

int main()
{int line = 0;while (line < 100000){printf("敲代码第%d行\n", line);line++;}printf("恭喜你成为大牛!\n");return 0;
}

六、数组

字符数组的大小(多有不足,待补充):

int main()
{char arr1[] = { 'a','b','c' };char arr2[] = { "abc" };char arr3[] = { "cde" };printf("%d\n", sizeof(arr1));printf("%d\n", sizeof(arr2));printf("%d\n", sizeof(arr3));return 0;
}

运行演示:

 七、操作符

按作用对象数量可分为单目运算符、双目运算符、三目运算符

单目操作符:

例:!逻辑反

双目操作符:

例:+  俩东西

三目运算符:

例:?:仨东西

(a)?b:c

a真执行B,假执行C

逗号表达式:从左向右依次计算,整个表达式的结果是最后一个表达式的结果。

举个例:

八、C语言关键字

auto:

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed        有符号

unsigned    无符号

sizeof

static

struct

switch

typedef    类型重定义

union

void

volatile        C++里面用

while

typedef:类型重定义        其实就是重新起一个名

九、static

static有修饰局部变量、全局变量、和函数的区别,那针对这三种情况展开讨论

9.1static修饰局部变量

 这是在test函数中没有加static的情况,如果加了static,再来试一下:

 对于第一个没有static修饰的n,在test函数中,每次执行过 test 之后就会被释放。

而对于加了static修饰的n,在第一次执行完static int n=1这个语句之后,相当于把int n等于1的值保存在了静态区,这点在最后进行总结。

9.2static修饰全局变量

我们知道,全局变量的作用域是整个程序。

而,extern修饰变量的声明。 

举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v。就像:

 而经过static修饰之后,那么这个全局变量的作用域就只能在本.c文件下使用了,演示一下:

可以看到,同样的代码,但是后者用了static 来修饰这个全局变量。那么在test.c中就不能用了。

 9.3static修饰函数

static经过我们上面的演示,它起的好像都是限制“作用范围”的作用,那static修饰函数我们也来演示一下:

在没有static修饰的时候,通过extern声明使用test1.c的函数Add可以达到通过函数计算两者和的目的,那加上static后呢? 

 由此,我们对上述进行一个总结:

 十、define定义常量和宏

#define又称宏定义,标识符为所定义的宏名,简称宏。标识符的命名规则与前面讲的变量的命名规则是一样的。#define 的功能是将标识符定义为其后的常量。一经定义,程序中就可以直接用标识符来表示这个常量。

宏所表示的常量可以是数字、字符、字符串、表达式。其中最常用的是数字。

那么,程序中什么时候会使用宏定义呢?用宏定义有什么好处呢?我们直接写数字不行吗?为什么要用一个标识符表示数字呢?

宏定义最大的好处是“方便程序的修改”。使用宏定义可以用宏代替一个在程序中经常使用的常量。注意,是“经常”使用的。这样,当需要改变这个常量的值时,就不需要对整个程序一个一个进行修改,只需修改宏定义中的常量即可。且当常量比较长时,使用宏就可以用较短的有意义的标识符来代替它,这样编程的时候就会更方便,不容易出错。因此,宏定义的优点就是方便和易于维护。

下面举几个例子来说明#define定义常量和宏

#define NUM 100
#define CH 'X'
#define STR "hehe"
#define Add(x,y) ((x)+(y))int main()
{printf("%d\n", NUM);printf("%c\n", CH);printf("%s\n", STR);int a = 10; int b = 20;int sum = Add(a, b);printf("%d\n", sum);return 0;
}

 十一、指针

提起指针,相信有很多同学学C语言都是被指针给劝退了,(因为当初我也是),还记得有一天下午看到指针,哭了,看哭了。不得不说很多人为了流量就用指针来吓人,我当初看到的教学视频,它上来给我将二级指针,三级指针。当时就被恶心到了。但是,指针其实多多理解,也不是很难。下面就讲解一下在下对于指针的一些拙见,希望能帮到大家一些。

指针,其实它就算地址,我们知道,在使用计算机进行一些操作的时候,肯定就会有数据来保存在其中,而保存的数据,要想及时反映出它所在的位置,就需要有一个属于它的编号,这个编号,就称为指针。

大家知道,int型的指针,在内存中占4个字节,那这四个字节具体是怎样的呢,我就来演示一下:

 

int main()
{int a = 10;printf("%p", &a);return 0;
}

 pa中保存的实际上是a的地址,就是0x00F3FE84但是通过这个地址,可以改变这个地址里面的值。

其实pa自己也有地址,它保存在内存的另一片空间

注:在32位操作系统下,指针的大小均为4字节(因为32位就算4个字节)

 

通过这里就可以观察到。 

刚学指针,水平尚低,还望大家多多包涵,多多指正。

十二、结构体

我们生活中是多种多样的,一个人的各项信息能够用代码呈现出来,少不了结构体的贡献。

例如,在描述一个学生的信息时,可以包含姓名,学号,年龄,成绩。利用结构体可以很好的进行描述。

例如在描述 张三,171,20,96.5 和 李梅,172,19,96.4这两组数据时,可以如此定义:

struct Std			//这里定义一个结构体变量
{char name[20];int group;unsigned int age;float score;
};int main()
{struct Std s1 = {"张三",171,20,96.5};struct Std s2 = {"李梅",172,19,96.4};printf("%s %d %d %f\n", s1.name, s1.group, s1.age, s1.score);printf("%s %d %d %f\n", s2.name, s2.group, s2.age, s2.score);return 0;
}

运行结果如下:

 以上就算对于C语言基础知识的一些概况了,代码让我们生活的世界更加精彩,真的是科技改变了我们的生活。奋斗了呀!共勉!


http://chatgpt.dhexx.cn/article/uxuU9p91.shtml

相关文章

c语言基础知识 入门必看(保姆级教学)

&#x1f353;个人主页&#xff1a;bit.. &#x1f352;系列专栏&#xff1a;Linux(Ubuntu)入门必看 C语言刷题 C语言基础 1.什么是C语言&#xff1f;为什么要学好C语言&#xff1f; 这是2022年球程序员使用计算机语言的排名&#xff1a;我们可以很清楚的看的c语言和c在将…

C语言基础知识入门(大全详解)

一、C语言基础知识入门 C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语…

单片机C语言基础知识篇

本人是一名在校的即将大四的物联网专业学生&#xff0c;暑假期间无聊&#xff0c;想写一些东西&#xff0c;来记录之前学过的一些单片机的基础知识&#xff0c;由于记纸质笔记太过低效率了&#xff0c;而且也不看&#xff0c;所以想学着写博客来记录。后续会不定期推出Arduino篇…

C语言基础知识总结大全(建议收藏)

前言&#xff1a;C语言是当代人学习及生活中的必备基础知识&#xff0c;应用十分广泛&#xff0c;下面为大家带来C语言基础知识梳理总结&#xff0c;C语言零基础入门绝对不是天方夜谭&#xff01; 1 算法结构 一、顺序结构、选择结构、循环结构&#xff1b;二、循环结构又分为…

c语言基础知识点字母和含义,大学c语言必背基础知识_c语言基础知识大全

描述 对于刚学计算机编程的同学来说,没一个编程知识都觉得很重要,其实不是的。下面小编为大家整理了相关大学c语言必背基础知识,希望大家喜欢。 大学c语言必背基础知识 举例说明: printf(“-”,123 ); 第二部分有三位,大于指定的两位,原样输出123 printf(“]”,123 );…

【C语言】C语言中基础操作符详细讲解

接着上次的C语言基础知识梳理&#xff0c;让我们来简单了解一下C语言里的操作符 目录 整数的二进制表示形式 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑运算符 条件操作符-三目操作符 下标引用、函数调用、结构成员访问操作符 隐式类型…

代理模式的理解?代理模式的应用场景?

说说你对代理模式的理解&#xff1f;应用场景&#xff1f; 一、是什么 代理模式&#xff08;Proxy Pattern&#xff09;是为一个对象提供一个代用品或占位符&#xff0c;以便控制对它的访问 代理模式的关键是&#xff0c;当客户不方便直接访问一个对象或者不满足需要时&…

设计模式 —— 代理模式

目录 一、代理模式的基本介绍 二、静态代理 三、动态代理 3.1 动态代理模式的基本介绍 四、Cglib 代理 4.1 Cglib 代理模式的基本介绍 五、几种常见的代理模式介绍— 几种变体 一、代理模式的基本介绍 代理模式&#xff1a;为一个对象提供一个替身&#xff0c;以控制对…

Spring:代理模式

一、概述 代理模式分为静态代理以及动态代理&#xff0c;属于23中设计模式之一。动态代理是SpringAop的底层。代理的概念如下图所示&#xff1a; 二、 静态代理 上图角色分析&#xff1a; 抽象角色&#xff1a;一般会使用接口或者抽象类来解决真是角色&#xff1a;被代理的角色…

什么是代理模式,如何写一个代理模式

什么是代理模式 代理模式分为静态代理模式&#xff0c;和动态代理模式&#xff0c;代理模式就是创建一个代理对象&#xff0c;由代理对象来接管原对象的引用,静态代理模式需要让代理类和被代理的类实现同一个接口&#xff0c;通过代理类中定义的构造方法将被代理的对象作为参数…

代理模式(Proxy)

代理模式介绍 代理模式:为一个对象提供一个替身&#xff0c;以控制对这个对象的访问。即通过代理对象访问目标对象好处是:可以在目标对象实现的基础上,增强额外的功能操作&#xff0c;即扩展目标对象的功能被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代…

代理 模式

代理模式 Proxy Pattern 为其他对象提供一个代理以控制对这个对象的访问 可以详细控制访问某个&#xff08;某类&#xff09;对象的方法&#xff0c;在调用这个方法前做前置处理&#xff0c;调用这个方法后做后置处理。 静态代理 直接写死的代码的代理逻辑 动态代理 动态…

代理模式例子

1.概念 代理模式就是为某个对象提供一种代理&#xff0c;以控制对这个对象的访问。 2.涉及角色 抽象角色&#xff1a;声明真实对象和代理对象的共同接口&#xff1b; 代理角色&#xff1a;代理对象角色内部含有对真实对象的引用&#xff0c;从而可以操作真实对象&#xff…

代理模式的使用

一.代理模式 代理模式是java常用的设计模式。 代理的定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。 简单点说就是代理对象与实际对象都实现了相同的接口&#xff0c;我们可以通过代理对象来间接的访问实际对象&#xff0c;也因为这种间接性&#xff0c;我…

C++之代理模式

目录 模式思想 简介 组成 优点 代码实现 情景 如果不使用代理的话&#xff1a; 加代理的话&#xff1a; 结果 模式思想 简介 代理模式&#xff1a; 通过代理类&#xff0c;来控制实际对象的访问权限。 在某些情况下&#xff0c;一个对象不适合或者不能直接引用另…

代理模式与动态代理模式

原文地址&#xff1a;点击打开链接 1、代理模式 所谓代理&#xff0c;就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下&#xff0c;一个客户不想或者不能够直接引用一个对象&#xff0c;而代理对象可以在客户端和目标对象之前起到中介的作用。 代理模…

设计模式之代理模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、代理模式是什么&#xff1f; 代理模式是一种结构型的软件设计模式&#xff0c;在不改变原代码前提下&#xff0c;提供一个代理…

动态代理模式详解

目录 &#xff08;一&#xff09;什么是动态代理模式 &#xff08;二&#xff09;动态代理模式入门案例 1.完成一个账户转账的功能 2. v1.0版本为转账添加一个事务 3.v2.0将事务从业务层和从持久层剥离 4.v3.0将事务使用动态代理完成 5.v3.0通过cglib实现代理模式 &…

三种代理模式详解

文章目录 二、代理模式&#xff08;Proxy Pattern&#xff09;1、常见的几种代理模式&#xff1a;2、静态代理3、JDK动态代理4、CGLib代理5、CGLib和JDK动态代理的区别 二、代理模式&#xff08;Proxy Pattern&#xff09; 根据B站狂神视频整理&#xff1a;https://www.bilibil…

Spring的代理模式

1、代理模式 为什么要学习代理模式&#xff1f; 因为这就是springAOP的底层&#xff01;【springAOP和springMVC】 代理模式的分类&#xff1a; 静态代理动态代理 1.1、静态代理 角色分析&#xff1a; 抽象角色&#xff1a;一般会使用接口或者抽象类来解决真实角色&…