一、变量

变量存储了两个东西:

1、内存空间地址

2、内存空间存放的值

本质是给内存地址起了一个别名,允许我们通过别名对内存进行访问

void variable01() {
int a = 100;
printf("a -> %d\n", a);
} int main() {
variable01();
return EXIT_SUCCESS;
}

1、不进行赋值调用问题

void variable02UseWithoutAssign() {
int a;
printf("a -> %d\n", a);
} int main() {
variable02UseWithoutAssign();
return EXIT_SUCCESS;
}

CLion允许程序正常执行,编辑区域会显示淡黄警告提示

如果是VS则不允许程序执行,没有赋值的变量不允许使用

如果声明的这个变量不知道应该赋值多少,就和CLion一样默认赋值0

2、变量声明前后问题

C允许变量可以在调用的函数之后赋值,语法:

void variable03EarlyUse() {
extern int sss;
printf("sss been early use with extern keywords -> %d\n", sss);
} int sss = 1000; int main() {
variable03EarlyUse();
return EXIT_SUCCESS;
}

在写的时候发现,即使extern不声明int 数据类型,也是可以执行的,但是编译器输出有看到错误提示:

warning: type defaults to 'int' in declaration of 'ssss' [-Wimplicit-int]

extern关键字的作用

告诉编译器这个变量的定义在后面,如果提前使用了,引导程序先找到变量的定义

再回到函数中继续执行下一行,如果寻找的变量不存在。程序终止

error: 'sss' undeclared (first use in this function); did you mean 'ssss'?

但是请不要这样使用,程序的可读性很差,书写混乱

二、常量

在程序运行中不可发生改变的值

但是C语言的常量存在五种形式:

1、字面值数值常量:

我们命名的变量在进行赋值时所使用的字符数值

除了整数100或者20这样的,同时实数也算常量,实数就是小数

2、字面值字符常量

字母,转义字符,都时字符常量

3、字符串常量

和字符常量一致,除了单引号和双引号的区别

4、符号常量

宏常量的定义

5、Consti定义

const int aa = 22200;

三、关键字 & 标识符

C程序预先对一些关键字做出了程序的预定义

参考知乎

https://zhuanlan.zhihu.com/p/77474834

四、数据类型

void dataType() {
short varA = 100; // 32768
int varB = 100;
long varC = 100;
long long varD = 100; printf("short -> %hd\n", varA);
printf("int -> %d\n", varB);
printf("long -> %ld\n", varC);
printf("long -> %lld\n"
, varD);
}

1、有符号与无符号整型区别?

void signedAndUnsigned() {
signed short varA = 327680;
unsigned short varB = 327680;
printf("varA -> %d\n", varA);
printf("varB -> %d\n"
, varB);
} int main() {
signedAndUnsigned();
return EXIT_SUCCESS;
}

五、SizeOf使用

可以直接对数据类型获取字节占用数

void sizeofUsage() {
// sizeof 用来查看数据类型占用的字节大小
printf("dataType int size is -> %llu\n", sizeof(int));
printf("dataType short size is -> %llu\n", sizeof(short));
printf("dataType long size is -> %llu\n", sizeof(long));
printf("dataType long long size is -> %llu\n", sizeof(long long));
printf("dataType float size is -> %llu\n", sizeof(float));
printf("dataType double size is -> %llu\n", sizeof(double));
} int main() {
sizeofUsage();
return EXIT_SUCCESS;
}

sizeof 也可以是一个变量来获取

int s = 2222;
printf("%d", sizeof(s));

六、Char字符型

void charDataType() {
char newLine = '\n';
char oneCharacter = 'a';
printf("ch -> %c \n", oneCharacter);
printf("newLine -> %d \n", newLine); // 以整型查看会被强转输出
} int main() {
charDataType();
return EXIT_SUCCESS;
}

大小写转换:

void lowerAndUpperTransform() {
char ch = 'e';
printf("this character char -> %c but int -> %d\n", ch, ch);
// int n = (int) ch;
ch = ch - 32;
printf("after change, char -> %c but int -> %d\n", ch, ch);
} int main() {
lowerAndUpperTransform();
return EXIT_SUCCESS;
}

七、浮点型

void floatDataType() {
printf("%d\n", sizeof(3.14));
printf("%d\n", sizeof(3.14f));
} int main() {
floatDataType();
return EXIT_SUCCESS;
}

格式化输出的一些操作:

void floatDataType() {double aa = 12.123456789;

    printf("%f\n", aa); // 单精度 %f
printf("%lf\n", aa); // 双精度 %lf printf("%.2f\n", aa); // 单精度 %f 指定小数保留位,并具有四舍五入
printf("%.4f\n", aa); // 双精度 %lf 指定小数保留位
} int main() {
floatDataType();
return EXIT_SUCCESS;
}

八、字符串类型

void stringDataType() {
printf("string -> %s\n", "Hello String");
printf("string -> %d\n", sizeof("Hello String")); // 拆分单个字符进行字节占用计算
// 虽然字符只有12个,但是实际上还有一个\0的标志 \0表示这个字符串的结束
printf("string -> %s\n", "Hello\0String"); // 从这里输入\0将只保留Hello后续的字符串不计入了
} int main() {
stringDataType();
return EXIT_SUCCESS;
}

字符串变量:

void stringDataType2() {
// 字符串,就是字符组成的数组 (Strings)
char str[] = "Strings";
printf("(%s)\n", str);
// 等同于这样的数组,但是单独打印输出会发现多出这么一个东西 (Strings )
char str3[] = {'S','t','r','i','n','g','s'}; // 现在的合并打印会一起看到这个:(StringsStrings)
printf("(%s)\n", str3);
} int main() {
stringDataType2();
return EXIT_SUCCESS;
}

九、SCANF 输入:

void scan01() {
int num = 0;
printf("num mem-addr -> %x\nnum value -> %d\n", &num, num);
printf("Input Tips: balabala...");
// 第二参数需要注入一个变量的地址,变量存储了值和地址,但是要获取地址的话,使用&前缀实现
scanf("%d", &num);
printf("num mem-addr -> %x\nnum value -> %d\n", &num, num);
}

【C】Re03的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  3. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  5. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  6. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  7. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  9. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  10. 【原】FMDB源码阅读(一)

    [原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...

随机推荐

  1. bpmn.js

    在 BPMN.js 中,$inject 属性通常用于声明依赖注入的模块列表.这些模块会在创建对象实例时由依赖注入框架(如 AngularJS)提供.以下是在 BPMN.js 中常见的一些 $injec ...

  2. vue3 elementui plus Select 选择器不选择下拉框里面的数据得到的value值

    我们先来看 我点击弹框出现什么都不做 直接点击确定 看传参 tableId,timeColumnId,userColumnId直接是名称而没有获取value值 看下下拉框里面的数据 而我想直接点击获取 ...

  3. 键盘中断,键盘驱动,基于Linux0.11

    键盘,咱们做计算机这一行的自然不必多说,天天与它打交道.但熟归熟,清楚键盘背后的原理吗?键盘上都标有各键的名称,表明了各键所代表的意义,但是计算机是如何知道的?组合键是怎样实现的?按下一个代表字符的键 ...

  4. C#.NET Winform承载WCF RESTful API (硬编码配置)

    1.新建一个名为"WindowsForms承载WCF"的WINFORM程序. 2.在解决方案里添加一个"WCF 服务库"的项目,名为"WcfYeah& ...

  5. 图片jpg,png转为BASE64编码

    -- using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace aliy ...

  6. Java实现延迟执行代码

    Java实现延迟执行代码对于Java程序在它们的操作中添加延迟或暂停是比较常见的.这对于任务暂停直到另外任务完成执行场景比较有用.本文我们提供两类方法实现延迟执行. 1. 基于线程(Thread)方法 ...

  7. 一个开源且全面的C#算法实战教程

    前言 算法在计算机科学和程序设计中扮演着至关重要的角色,如在解决问题.优化效率.决策优化.实现计算机程序.提高可靠性以及促进科学融合等方面具有广泛而深远的影响.今天大姚给大家分享一个开源.免费.全面的 ...

  8. 使用vscode写Markdown并且导出为pdf(干货)

    目录 序言 下载vscode 安装插件 markdown语法 导出为pdf 序言 大家在学习过程中都会有记笔记的好习惯(美观的笔记当然是上上选),于是,Markdown就是一个不错的选择,待会也会附上 ...

  9. 为什么https要使用证书

    为什么https要使用证书 什么是httpshttps不是一种新的协议,只是http的通信接口部分使用了ssl和tsl协议替代,加入了加密.证书.完整性保护的功能. 加密:共享密钥加密加密和解密公用一 ...

  10. pytest_terminal_summary重写收集测试报告并发送邮件,报错"Argument(s) {'Config'} are declared in the hookimpl but can not be found in the hookspec"

    步骤: 1.conftest.py文件,重写pytest_terminal_summary(terminalreporter, exitstatus, config) 2.run执行pytest.ma ...