一、变量

变量存储了两个东西:

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. 主成分分析(PCA)介绍

    目录 计算过程 投影分量计算 假设你有一家理发店,已经记录了过去一年中所有顾客的头发长度和发型偏好的数据.现在你想从这些数据中提取一些主要的信息,比如顾客最常选择的发型类型,以及不同发型之间的相关性等 ...

  2. react移动端组件antd-mobile

    使用react移动端组件antd-mobile完成底部导航功能实现. 官网:https://mobile.ant.design/docs/react/introduce-cn antd-mobile ...

  3. vue组件间传值 父组件向子组件传值

    ² 父组件以属性的形式绑定值到子组件身上 ² 子组件通过使用属性props接收(props是单向绑定的(只读属性):当父组件的属性变化时,将传导给子组件,但是反过来不会) 第1步,父组件以动态属性的方 ...

  4. LeetCode 221. Maximal Square 最大正方形(C++/Java)

    题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's an ...

  5. kettle从入门到精通 第五十课 ETL之kettle 课程源文件分享

    Kettle 是一款功能强大的开源 ETL 工具,被广泛应用于数据集成.数据转换和数据加载等领域.随着数据量和多样性的不断增加,使用 Kettle 进行数据处理已成为许多企业和数据工程师的首选.在过去 ...

  6. CF914C

    problem & blog 数位 dp 模板题. 经过一次操作,可以把 \(n\) 变成一个小于 \(10^3\) 的数. 所以我们可以把所有小于 \(10^3\) 的数操作的次数全部处理出 ...

  7. ABC332

    D 我们可以把矩阵 \(\text{A}\) 看成 \({p,q}\). \(p\) 指现在一行最开始在哪里,\(q\) 指现在这一列最开始在哪里. 于是我们枚举 \(p\) 和 \(q\) 所有可能 ...

  8. LINQ to Entities does not recognize the method 'System.String ToString()' method

    LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method ca ...

  9. R-tree算法

    R-tree是一种用于处理空间数据的自平衡搜索树结构,特别适合于存储和查询二维或更高维度的空间对象,如点.线段.矩形等.它在地理信息系统.计算机图形学.数据库等领域有广泛应用.R树通过将空间分割成几个 ...

  10. java8 API 函数式接口

    简介 14年,Oracle公司如期发布了Java 8正式版,Java8提供了强大的流式处理及函数式接口编程 函数式接口编程,相信很多人在javascript中都使用过,比如回调函数,如今Java8也吸 ...