[C]语法, 知识点总结(一. 进制, 格式化输入/出, 指针)
进制
概念: n进制, 最大的数是n-1, 逢n进1位.
数据类型
概念:
其实就是占的位数不同, 转换到计算机当中都是0和1.
常用:
| 类型名 | 占字节数 | 描述 |
|---|---|---|
| char | 1字节=8个二进制位 | 字符类型, 也是整型存入本地(参照ASCII码表) |
| short | 2字节=16个二进制位 | 短整型类型, 2的16次幂表示的数 |
| int | 4字节 | 整型 |
| long | 4字节(32位),8字节(64) | 长整型 |
| float | 4字节 | 浮点型(有效数字6-7位) |
| double | 8字节 | 双精度浮点型(有效数字15-16位) |
| long double | 16字节 | 长双精度浮点型(有效数字18-19位) |
注意:
记住一句话, 你不需要管怎么存, 只需要知道如何取, 例: 查看一个char类型, 你可以用%d打印
格式化输入
原理:
在控制台输入的内容放到缓冲区中, 然后设置条件(scanf占位符), 按Enter键, 根据占位符个数赋值到对应的地址中
例:scanf("%c %c")
代码格式:
scanf("占位符, 占位符", &类型, %类型);
例子:
char ch;
int num;
scanf("%c, %d", &ch, &num);
注意:
- 在控制台输入的时候, 必须遵循scanf里的格式, 该有逗号和空格必须得输入
- 占位符可有多个, 但是数量必须和后面类型对应上
- 最好占位符中不要添加/n, 会过滤掉你在控制台输入的回车
- 不要使用小键盘的Enter, 而是要用大键盘的Enter
补充:
getchar() 可以从控制台接受一个字符
例如: char a = getchar()
格式化输出
printf("占位符", 变量);
例1:
int a = 10;
printf("%d", a);
例2:
printf("%d\n", 20);
常用占位符
| 占位符 | 含义(格式化输出) |
|---|---|
| %c | 字符 |
| %s | 字符串 |
| %d, %i | 整数 |
| %o | 八进制数 |
| %x, %X | 十六进制数 |
| %u | 无符号十进制 |
| %f | 浮点型 |
| %fL, %Lf | 长浮点型 |
| %.2f | 保留小数点后2位 |
| %p | 指针 |
| %% | %号 |
常见问题
例1.
int a = 1;
5 > 3 || a++; 问: a最后的值是多少?
分析: || 逻辑或, 左边5 > 3 已经为真, 那么右面无论是真, 是假, 整个表达式都是真, 所以逻辑或进行了优化, 如果左边为真, 右面就不会运算, 所以a还是1
例2.
int a = 1;
int b = 1;
a *= b + 3; 问: a最后的值是多少?
分析: 复合运算, 默认打开之后是a = a * b + 3, 但是呢复合运算, 会进行优化, 也就是a = a * (b + 3), 所以a是4
例3.
int a = 2, b = 3;
(a++)+b; 和a+++b; 问: 这2个表达式最后的值是多少?
分析: 这2个表达式其实一样, a++必须在表达式结束后, 自己的值才会进行自增, 也就是a++ 然后还没有结束, 先用a的值, 然后+b 所以结果等于5, 然后a的值才等于3
指针
我们先来看下, 内存大概分为这几块

定义:
int b = 10;
int *p = &b; // 先来说说很多人纠结的一个问题: p到底是什么类型的, 其实它是一个指向整型数字的地址的指针. 这个我们来看图. (ps: 10的地址在常量区是0xa, 用%p可以打印一下)

分析一下上面这个图:
10的地址是0xa, 然后int b = 10;
现在b这个变量里存的就是10;
然而, b自己是有地址的
而现在 int **p = &b(&代表获取b的地址);
p也是一个变量, 是指向整型数字的地址的指针, 那么p保存的是b的地址;
然后作为一个保存地址的p变量其实也有自己的地址;
使用:
现在我们想要利用p来访问10怎么办, 下面这样.
int num = *p;// 星号单独出现, 叫做间接访问修饰符 (访问这个p里保存的地址所保存的内容)
注意1
int *a = NULL, b = 3; (这个时候b是整型)
扩展: nil(指针为空) Nil(一个类指针为空) NULL(基本数据类型为空)
语法糖(一般用于访问数组)
int a[5] = {1, 2, 3, 4, 5};
先来看下数组的分配空间:

说明: 其实就是a虽然是数组的名字, 但是它存的是数组中第一个元素的地址(也就是a本身就是个指针)
用语法糖访问数组中的2应该怎么办?
a[1]; // 这里[]里填写元素所在的下角标(从0开始数), 那么指针发生了移动, 现在指向高位移动4个字节

(why: 因为元素类型是int型(占4字节))所以每次移动4字节就到元素2
(a[1] 原型是 *(a + 1)) 其实还可以这么写1[a]
[C]语法, 知识点总结(一. 进制, 格式化输入/出, 指针)的更多相关文章
- Python环境安装与基础语法(3)——进制、运算符和优先级、原码、补码
进制 转十进制:基本运算方法(权算方式) 0b1111——>1*2**3 + 1*2**2 + 1*2**1 + 1*2**0 0x7F——>7*16**1 + F*16**0 转二进制: ...
- linux od命令: 按不同进制显示文件
介绍:od(octal dump)命令可以以八进制.十进制.十六进制和ASCII码来显示文件或者流,它们对于访问或可视地检查文件中不能直接显示在终端上的字符很有用.语法: od [-A 地址进制] [ ...
- NYOJ-244 16进制的简单运算 AC 分类: NYOJ 2014-01-17 21:11 195人阅读 评论(0) 收藏
#include<stdio.h> int main() { long x,y; char op; int t; scanf("%d ", &t); while ...
- Linux工具之bc计算器进制的转换
bc是Linux下的命令行式的计算器. 题目虽然叫任意进制,但是因为bc的限制,输入进制是2~16范围:输出进制是2~999范围.这与常见计算器的进制范围是一致的,比如windows计算器最高也只能处 ...
- WPF 16进制byte输入框
在WPF中,针对byte类型的输入控件可以选用 XCEED 的免费库中的 Xceed.Wpf.Toolkit.ByteUpDown(可从nuget获取). 若要使该控件在界面上以16进制显示byte, ...
- gentoo usb serial ch340 16进制读写
首先安装包含 lsusb 命令的 usbutils, emerge -v usbutils. 使用 lsusb后,可以查看到 ch340 的信息: Bus 001 Device 004: ID 1a8 ...
- CSDN编程挑战——《进制转换》
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/user_longling/article/details/24804949 进制转换 题目详情: 我 ...
- 九度OJ 1016:火星A+B (进制转换)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4913 解决:1334 题目描述: 读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的, ...
- [洛谷 P1013] NOIP1998 提高组 进制位
问题描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: L K V E L L K V E K K V E KL V V E KL KK E E K ...
随机推荐
- CommandoVM-虚拟机映像文件 | VM打开直接用
呵呵!自从火眼发布了这个CommandoVM,想必大家应该都挺激动,然而实际操作一下,基本炸裂-- 因为并没有给类似于kali这种直接安装的现成镜像,而是要通过github的脚本去完全网络安装 实际操 ...
- 做游戏的小伙伴们注意了,DDoS还可以这样破!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 作者:腾讯DDoS安全专家.腾讯云游戏安全专家haroldchen 摘要:在游戏出海的过程中,DDoS攻 ...
- Google I/O 2018大会小结
Google I/O 2018大会于北京时间5月9日凌晨1点,在美国山景城Shoreline Amphitheatre(圆形剧场)举办.看了一下录播,字幕延迟,全程靠听,下面对上午的主会进行一个小结. ...
- C++ Makefile文件编写
对现有的一个C++动态库文件和调用程序,分别编写Makefile文件,从零开始,这里把自己弄明白的一些东西分享给大家. 1.必须明确Linux下,C++的编译器是g++,C语言的是gcc.网上大多数又 ...
- Zero-shot learning(零样本学习)
一.介绍 在传统的分类模型中,为了解决多分类问题(例如三个类别:猫.狗和猪),就需要提供大量的猫.狗和猪的图片用以模型训练,然后给定一张新的图片,就能判定属于猫.狗或猪的其中哪一类.但是对于之前训练图 ...
- 使用maven的插件进行maven项目的打包
1 maven项目打包的插件有3种 maven-jar-plugin maven-assembly-plugin maven-shade-plugin 2 maven-jar-plugin 现在要新增 ...
- Jenkins之自动构建
修改job的配置: Build periodically:不管版本是否修改,都会执行: Poll SCM:只有当版本有修改才会执行.
- oracle-表空间剩余空间大小占比查询
select tablespace_name, max_gb, used_gb, round(100 * used_gb / max_gb) pct_used from (select a.table ...
- [代码]--IIS发布网站浏览之后看到的是文件目录 & Internal Server Error 处理程序“ExtensionlessUrlHandler-ISAPI-4.0_64bit”在其模块列表中有一个错误模块“IsapiModule” 解决方法 & App_global.asax.pduxejp_.dll”--“拒绝访问。 ”
Q:IIS发布网站浏览之后看到的是文件目录 A:它出现了一个说到.NET4.0 更高框架什么的错误,所以我将 .NTE CRL版本由4.0改为2.0了,改为2.0后就出现了只能浏览文件目录了.改为4. ...
- Java线程池 与Lambda
七.线程池.Lambda 1.1基本概念: 线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多的资源. 1.2线程池的好处: ...