【C语言】C语言基础语法速览

C语言基础语法目录

  • C语言基础语法速览
    • 1. 变量类型
      • 1.1 类型字节数
      • 1.1 变量输出格式
      • 1.2 变量输入格式
    • 2. 分支循环语句
      • 2.1 if分支语句
      • 2.2 switch 分支语句
      • 2.3 while循环语句
      • 2.4 do...while循环语句
      • 2.5 for循环语句
    • 3. 数组
      • 3.1 一维数组
      • 3.2 二维数组
    • 4. 结构体
      • 4.1 结构体类型定义
      • 4.2 结构体类型初始化
    • 5. 共用体
    • 6. 枚举
    • 7. 其他
      • 防止头文件重复包含
  • 最后

C语言基础语法速览

1. 变量类型

基本类型

  • 整型 int、short、long
  • 字符型 char
  • 浮点型 float 、 double

构造类型

  • 数组类型
  • 结构类型 struct
  • 联合类型 union
  • 枚举类型 enum

指针类型

  • char * 、int * 、int **

1.1 类型字节数

类型字节大小
char1
short2
int4
long4
long long8
float4
double8

可以用 sizeof 函数进行验证:

#include<stdio.h>
int main()
{short a;unsigned short ua;int b;unsigned int ub;long c;long long d;char e;float f;double g;printf("short size=%d\n",sizeof(a));printf("unsigned short size=%d\n",sizeof(ua));printf("int size=%d\n",sizeof(b));printf("unsigned int size=%d\n",sizeof(ub));printf("long size=%d\n",sizeof(c));printf("long long size=%d\n",sizeof(d));printf("char size=%d\n",sizeof(e));printf("float size=%d\n",sizeof(f));printf("double size=%d\n",sizeof(g));return 0;
}//输出
short size=2
unsigned short size=2
int size=4
unsigned int size=4
long size=8
long long size=8
char size=1
float size=4
double size=8

1.1 变量输出格式

整型部分

输出格式作用
%d输出有符号10进制数
%hd可用于接收short类型,2个字节 变量值
%ld可用于接收long类型,4个字节 变量值
%lld可用于接收long long 类型,8个字节 变量值
%nd输出有符号10进制数,左边填充空格,总长为8
%0nd输出有符号10进制数,左边填充0,总长为8
%o输出8进制数
%x输出16进制数,输出字母以小写输出
%X输出16进制数,输出字母以大写输出
%u输出一个10进制的无符号数,可用于接收 sizeof(类型名),以及unsigned int
%hu可用于接收unsigned short类型,2个字节 变量值
%lu可用于接收unsigned long类型,4个字节 变量值
%llu可用于接收unsigned long类型,8个字节 变量值

浮点型部分

输出格式作用
%f接收float、double类型 ,默认保留6位小数
%08.4f显示8位数(包含小数点),不足8位用0填充。并且保留4位小数,对第5位做四舍五入到第4位

字符部分

输出格式作用
%c输出单个字符
%s输出字符串或者字符数组
%%输出一个百分号%
#include<stdio.h>
int main()
{int a = 10;int b = 0123;int c = 0x1abc;unsigned int d = 1;printf("a=%d\n",a);printf("a=%08d\n",a);printf("a=%8d\n",a);printf("b=%o\n",b);printf("small c=%x\n",c);printf("big c=%X\n",c);printf("d=%u\n",d);return 0;
}//输出
a=10
a=00000010
a=      10
b=123
small c=1abc
big c=1ABC
d=1

1.2 变量输入格式

值得注意的是,double类型的输入格式是 %lf ,和输出格式有区别。当然输出格式也可以是%lf,但是根据C语言标准通常使用 %f 用于输出格式。

#include<stdio.h>
int main()
{int a;//格式如下scanf("%d",&a);printf("a=%d\n",a);return 0;
}

2. 分支循环语句

2.1 if分支语句

if(判断表达式)
{}
else if(判断表达式)
{}
else
{}

2.2 switch 分支语句

switch(判断表达式)
{case 结果1:执行语句;break;case 结果2:执行语句;break;case 结果3:执行语句;break;default:执行语句;break;
}

2.3 while循环语句

while(判断表达式)
{循环体
}

2.4 do…while循环语句

do{循环体
} while (判断表达式);

2.5 for循环语句

for(int i=0;i<length;i++)
{循环体
}

注意事项: break 语句在多层循环中,只能跳出一层循环。continue 语句只能跳过当次循环。

3. 数组

3.1 一维数组

声明规则: 类型 数组名[常量] 例如: int a[10];

数组大小 = 数组类型占用字节数 * 元素个数

注意这里的数组大小,不管有没有初始化,只要正常声明了,就会给数组分配所有空间

指针大小 = 64位机器是8个字节,32位是4个字节,不管是什么类型的指针都是这个数。

#include <stdio.h>
#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char *argv[]) {int a[10]= { 1, 2, 3 };//int a[] = { 1, 2, 3, 4, 5 };char cs[10]={0};char * cp[10];cp[0]=cs;cp[1]=cs[1];//数组地址就是第一个元素的地址,数组地址可以直接用数组名代替 //查看数组地址printf("a=\t%p\n",a);//查看数组第一个元素地址printf("&a[0]=\t%p\n",&a[0]);printf("cp[0] size is:%u\n",sizeof(cp[0]));printf("===============\n");//指针大小,8个字节,因为这是64位机器printf("&a[0] size=\t%u\n",sizeof(&a[0]));printf("&cs[0] size=\t%u\n",sizeof(&cs[0]));printf("&cp[0] size is:%u\n",sizeof(&cp[0]));printf("int arr size is: %u\n",sizeof(a));printf("char arr  size is: %u\n",sizeof(cs));return 0;
}//输出
a=      000000000062FDF0
&a[0]=  000000000062FDF0
cp[0] size is:8
===============
&a[0] size=     8
&cs[0] size=    8
&cp[0] size is:8
int arr size is: 40
char arr  size is: 10

3.2 二维数组

声明规则: 类型 数组名[常量][常量] 例如: int a[10][10];

二维数组默认行优先存储,也就是说存储时存储器中的数组还是一维的,存完第一行再存第二行,元素总数=行数*列数。

int main(int argc, char *argv[]) {//二维数组初始化方式int aa[3][4] = { { 1, 2, 3, 4 },{ 5, 6, 7, 8 },{ 9, 10, 11, 12 }};//int a[3][4] = { 1, 2, 3, 4 , 5, 6, 7, 8, 9, 10, 11, 12  };//未初始化的默认是0 //int a[3][4] = { 1, 2, 3, 4  };//一维长度会自动分配//int a[][4] = { 1, 2, 3, 4, 5, 6, 7, 8};return 0;
}

4. 结构体

结构体就是把一系列的变量组合成一个整体。

4.1 结构体类型定义

//定义一,其中stu是结构体类型名,tom,Jerry是这个类型的变量
struct stu
{char name[20];int age;char sex;
} tom,jerrys;//定义二,等同于上面
struct stu
{char name[20];int age;char sex;
};
struct stu tom,jerrys;//定义三,匿名结构体类型
struct
{char name[20];int age;char sex;
} tom,jerrys;//定义四,引入 typedef 给结构体类型起一个别名
typedef struct stu
{char name[20];int age;char sex;
} student;student stu1;
//等价于
struct stu stu1;

4.2 结构体类型初始化

//方式一  结构体初始化
typedef struct stu
{char name[20];int age;char sex;
}student;student stu1;
strcpy(stu1.name, "lisi");
stu1.age =10;
stu1.sex = 'f';
printf("stu1 name=%s age=%d sex=%c\n",stu1.name,stu1.age,stu1.sex);
//输出
stu1 name=lisi age=10 sex=f//方式二  结构体初始化
student stu2={"tom",20,'M'};
//输出
stu2 name=tom age=20 sex=M//方式三  结构体数组初始化
student stu3[2]=
{{"jerry",30,'F'},{"sandy",25,'M'}
};
int len = sizeof(stu3)/sizeof(student);
int i;
for(i=0;i<len;i++){printf("stu3[%d] name=%s age=%d sex=%c\n",i,stu3[i].name,stu3[i].age,stu3[i].sex);
}
//输出
stu3[0] name=jerry age=30 sex=F
stu3[1] name=sandy age=25 sex=M//方式四  结构体指针初始化
student * stu4= (student *)malloc(sizeof(student));strcpy(stu4->name,"xiaoli");stu4->age=26;stu4->sex='f';printf("stu4 name=%s age=%d sex=%c\n",stu4->name,stu4->age,stu4->sex);
//输出
stu4 name=xiaoli age=26 sex=f

5. 共用体

  union是一个能在同一个存储空间存储不同类型数据的类型。共用体变量中起作用的成员是最后一次存放的成员。共用体变量的地址和它的各成员的地址都是同一地址。联合体所占的内存长度等于其最长成员的长度。

#include <stdio.h>
#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef union TempVar 
{int a;short b;char c;double d;float f;
} tempVar;int main(int argc, char *argv[]) {tempVar temp;temp.f = 1.5;temp.b=15;temp.c='c';temp.a=20;temp.d = 2.3;printf("tempVar size is:%ld\n",sizeof(temp));printf("tempVar value is:%f\n",temp.d);return 0;
}//输出
tempVar size is:8
tempVar value is:2.300000

6. 枚举

给第一个枚举属性赋值,后面的属性会自动加1个赋值

#include <stdio.h>
#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef enum weekday
{mon=1, tue, wed, thu, fri, sat,sun
}week;int main(int argc, char *argv[]) {week temp;temp=tue;printf("week is:%u\n",temp);	 return 0;
}
//输出2

7. 其他

防止头文件重复包含

使用一些预处理指令来避免重复包含文件

//假如文件名为hello.h,可以给头文件以下定义
//方法一:
#ifndef __HELLO_H__
#define __HELLO_H__
/*头文件中方法的声明,或者变量的声明语句
*/
#endif//方法二:
#pragma once/* 文件中方法的声明,或者变量的声明
*/

最后

推荐一个零声教育学习教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:链接

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

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

相关文章

4个宝藏网站,免费即用,办公运营效率利器!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 有很多朋友在日常办公时&#xff0c;需要发送邮件&#xff1b;在新媒体运营、设计及前端开发等工作场合中&#xff0c;都或多或少会遇上图片、视频等文件太大及格式问题需要压缩和转换…

数据结构(三)栈 队列 数组

2024年5月26日一稿(王道P78) 栈 基本概念 基本操作 顺序存储结构 基本操作 共享栈

微信小程序开发 懒加载+瀑布流+排序功能

在小程序的开发过程中&#xff0c;遇到了这样的功能需求&#xff1a;在保持瀑布流布局的情况下&#xff0c;使用懒加载来渲染页面&#xff0c;并且要求对其中的属性添加排序功能。 单独拿出来都是很好实现的功能&#xff0c;但是当三个功能联系在一起时&#xff0c;问题就出现…

数智乡村:是不是乡村治理治理的巨大进步呢?

一、什么是数智乡村 数智乡村是指借助信息技术和数据分析等手段&#xff0c;对乡村进行智能化管理和服务的模式。它可以提供更高效、精准、便利的服务&#xff0c;促进乡村经济发展和社会治理改善。因此&#xff0c;数智乡村确实可以被视为乡村治理的巨大进步。 二、数智乡村的…

大一久富农机实习与商业思维学习计划

学习目标&#xff1a; 大一久富农机实习与商业思维学习计划 一、目标 完成久富农机的实习&#xff0c;增强对农机行业的了解和实际操作能力。提升自身的商业思维能力&#xff0c;为未来的职业生涯打下坚实基础。组织并带领同学院的同学一起参加实习&#xff0c;增强团队合作…

腾讯发布ELLA:为扩散模型注入LLM能力,提升复杂场景的图像生成,准确率超90%

前言 近年来&#xff0c;基于扩散模型的文本到图像生成技术取得了显著进步&#xff0c;能够生成高质量、逼真的图像。然而&#xff0c;大多数扩散模型仍然使用CLIP作为文本编码器&#xff0c;这限制了它们理解复杂提示的能力&#xff0c;例如包含多个物体、详细属性、复杂关系…

python-pytorch seq2seq+luong dot attention笔记1.0.3

python-pytorch seq2seq+luong dot attention笔记1.0.0 可复用部分编写encoder编写Attention编写decoder编写seq2seq设定模型参数模型训练使用模型使用总结下一步参考链接可复用部分 主要将数据弄成如下格式: seq_example = [“你认识我吗”, “你住在哪里”, “你知道我的名…

ROS 2边学边练(51)-- 构建自定义(消息类型)RViz显示项

前言 一俩礼拜没有更新了&#xff0c;今天突然发现ROS 2突然有了新版本了&#xff0c;名为Jazzy&#xff0c;这更新速度与Qt有的一比。这么长时间没更新呢&#xff0c;一来工作上来活了&#xff0c;没那么多时间来继续ROS这块&#xff0c;二来&#xff0c;人懈怠了一点&#xf…

Grafana HTML Panel展示post获取后数据

<!DOCTYPE html> <html> <head><title>API 数据表格展示</title><script src"https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body><table id"data-table" border"1&qu…

航运复兴?大摩不信!

大摩认为&#xff0c;从供需关系来看红海危机只是推迟了航运业下行周期的到来&#xff0c;一旦干扰消除&#xff0c;行业可能重回周期性低迷。 红海危机加剧运力紧张&#xff0c;航运市场价格飞涨。 大摩在24日的一份报告中指出&#xff0c;受红海危机干扰航运市场运力&#…

Spring Boot+Debezium:解决 MySQL Binlog监听

在当今的企业应用中&#xff0c;对数据变更进行实时捕获和处理是至关重要的。而Debezium作为一个强大的开源平台&#xff0c;能够实时捕获数据库的变化事件&#xff0c;为实时数据流处理提供了可靠的解决方案。在本文中&#xff0c;我们将探讨如何将Debezium与SpringBoot项目无…

Springboot集成GRPC

Springboot集成GRPC 一、springboot版本二、GRPC的pom依赖2.1 服务端2.2 客户端3.构建依赖 三、配置文件服务端客户端 四、 demo4.1 编写proto文件4.2 生成文件4.3 服务端重写方法4.4 客户端调用该方法 五、测试 一、springboot版本 <groupId>org.springframework.boot&l…

pycharm找不到conda可执行文件解决办法

解决办法 1、第一种 按照以下步骤&#xff0c;找到condabin文件下面&#xff0c;conda.bat 文件&#xff0c;把路径给复制下来&#xff0c;粘贴到 Conda 可执行文件&#xff0c;即可。 然后再点击加载环境&#xff0c;我这里是已经汉化了 pycharm &#xff0c;如何汉化&…

Linux - 用户管理

1 基本介绍 Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统 2 添加用户 基本语法 //添加用户 useradd 用户名 实列(root权限下) useradd huchen…

Less语法

一:less作用 是CSS的预处理器,扩充了CSS语言,使CSS具有一定逻辑性、计算功能;通了less语法,生成.CSS文件; 二:具体使用规则 1 less变量设置属性值 语法规范: @变量名:属性值名;CSS属性:@变量名;eg:给box盒子添加粉色背景 @bgcolor:purple; .box{background-col…

C++——list的实现以及源码

前言&#xff1a; 最近学习了clist的实现&#xff0c;这让我对迭代器的理解又上升了一个新的高度&#xff0c;注意&#xff1a;代码里的list是放在一个叫zgw的命名空间里边&#xff0c;但是在实现list的代码中没有加namespace&#xff0c;这里给个注意&#xff0c;以后复习时能…

解密论文评审过程:SCI论文是匿名送审的吗?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 前几天有位学员问我&#xff0c;审稿人能看见我论文的作者和单位信息吗&#xff1f;应该是双方都匿名才更公平啊。 同行评议&#xff0c;在不同的期刊操作还真不一样。有双方…

spring学习笔记一

前言&#xff08;第一性原理&#xff09; 那么spring解决问题&#xff1a;JAVA开发框架&#xff0c;spring是用来解决企业级Java应用开发的问题。 通过依赖注入和面向切面编程来灵活管理和配置代码&#xff0c;提供一套工具来帮助开发和配置代码&#xff0c;提供了声明式事务…

AI重塑保险业未来:机器学习在风险评估、欺诈检测与客户服务中的深度应用

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…