C的日记-Printf和Scanf

------------------------------------------------------------------------------------
printf和scanf的区分

&是一个取地址符,&a表示变量a的地址。
scanf("%d",&a);  表示从键盘接收一个整数存储到内存中&a所指的地址,也就是变量a中。

&a表示变量在内存中的地址,是a在内存空间中的地址;
&a所指的地址:即存储字节的地址,即变量a的值存放的地方,即变量a中。
scanf("%d",&a);是指把输入的内容存放到 a所在的内存空间的地址所指向的字节存储地址中,即把输入的内容赋值给了a;
scanf("%d",a);是把输入的内容存放到 a所在的内存空间的地址中,这个地址是编译系统分配的,这么所就改变了内存空间地址,危险;
printf("%d",a);是指把a中的内容赋值给%d打印;
printf("%d",&a);是指把a的地址赋值给%d打印;
两个之所以不同是因为printf中是取值,就直接把当前值给出去就好了,
而scanf中是从外界接受值,"%d"后面的值是指输入数据要存入的地方,是这个值的下一级,或者可以说是这个值所指向的地方。

-----------------------------------------------------------------------------------

1.标准输入输出函数
putchar.
<1>putchar作用是向终端输出一个字符,即使在putchar(a,b)也只能输出第一个字符
putchar只能输出字符型的变量,其他变量输出会报错,但是这个字符型变量可以等于整形的
比如char c=65;putchar(c);或者putchar(97);都是对的;
而int c=65;putchar(c);是错的,但是强制类型转换putchar((int)c);是对的
putchar(‘101‘)能输出1,因为1也是一个ASCII字符。
putchar(‘\101‘)能输出A,因为它输出了转义字符。
putchar(‘\\‘)能输出\字符。putchar(92);也能输出\字符。
-----------------------------------------
综上可见,所有能输出的字符都是ASCII表中存在的,只不过由于编译系统的符号问题,有些符号比如说‘\不能直接输出,因为这样编译系统会报错,所以我们采用了转义字符输出,即:putchar(‘\?‘);这里面的问号可以是数字0-255,也可以是‘\符号
转义字符的意思是把当前字符换成ASCII码表中的另一种表示方式然后输出!!
比如:putchar(‘\101‘)=putchar(101)=putchar(‘A‘) 而putchar(‘\\‘)=putchar(92)
转义字符的真正含义是把转义字符后面的字符转换成ASCII码的数值进行输出。

变量就是存储在内存某一块地址中的数值,其值是可以改变的
变量名就是你在程序中如何使用这块地址,给他起了一个名字
变量名实际上是以一个名字代表一个内存地址,编译系统在工作时,会给每个变量名分配内存地址和空间,如char分配1个字节,在这一个字节中使用0/1编码可以表示0-255种字符。对变量的值进行改变,实际上先通过变量名查找到该变量所在的内存地址,再对这个地址的存储单元中取出当前的0/1编码进行操作。
-----------------------------------------
将一个字符常量赋值给字符变量,实际上不是把字符本身放到内存单元中,而是把字符对应的ASCII码放到内存单元中,以字符输出,先转换再输出;以整数输出,直接输出!
-----------------------------------------
我们在输出变量名的时候,putchar(a)实际上做的就是通过变量名a查找到内存地址,取出该地址存储单元中的数值(ASCII码值);
而putchar(‘a‘)的时候进行的是直接输出数值。
走下putchar(‘a‘)的流程:编译系统编译通过,编译成二进制的中间文件,然后系统分配给a一个无名的1字节内存空间,这个空间里存放的值是65。然后操作系统进行库文件连接,知道了输出的格式为char类型后,就先把数值转换成字符,然后打印到输出设备上,这个临时空间就清空了。

-----------------------------------------------------------------------------------
综上:
char a=65/char a=‘a‘ 内存中存放的都是65
putchar(a)是查找a所在地址存储空间数值,进行char类型的格式化输出,输出的都是a
putchar(96)实际上是没有进行空间存储,它是直接把96转换成二进制码输出对应的字符‘
putchar(‘abcdadf‘)是临时开辟无名内存,内存中只有65一个数,输出是a
putchar(‘101‘)同上,因为1也是字符,只不过内存中数字变了
putchar(‘\101‘)转义字符,本来内存只能存入1对应的码的,但是\101开辟内存时把101变成了存储的值,现在内存中存放了101,输出变成了101对应字符
putchar(‘\\‘)在上面基础上开辟内存的时候把\对应的ASCII码值变成了存储的值,这样输出的时候就直接输出字符\,如果不这么做,执行系统是无法直接输出\字符的,编译系统会报错的
putchar(‘\1011‘)在转义字符开辟内存时1011超过了255,所以无法存入存储空间,这个转义符就没起到作用,本质是=putchar(‘1011‘)
-----------------------------------------------------------------------------------

时间: 2024-11-23 23:25:11

C的日记-Printf和Scanf的相关文章

C的printf与scanf的用法

之前没学过C语言,只学过C++,所以就来自学下C语言了,其实个人认为C与C++的区别很小,基本上就是printf与scanf这点输出和输入的区别了,如果还有什么区别的话那就是要包含的头文件是不同的.比如在C++中,是#include<iostream>.而在C中是#include<stdio.h> 在调用printf与scanf的时候一定要包含#include<stdio.h> printf的用法是:printf("格式控制字符串",输出参数一,输出

黑 马 程 序 员_视频学习总结&lt;c语言&gt;----02 printf和scanf函数、基本语句和运算、流程控制、函数、数组、字符串

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.printf函数 1.在使用peintf函数前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据,其中使用格式是 printf(“字符串”) :或者 printf(“字符串”, 格式符参数): 2.常用的格式符及其含义如图所示 3.格式符还可以添加输出宽度 二.scanf函数 1.在使用scanf函

printf和scanf

一 printf和scanf(printf和scanf是c语言中的输入输出库函数) printf(”格式控制“,输出列表) <1>格式控制 其中包含 格式声明(%+相应格式对应字母).转义字符(\n).格式附加字符(左靠).和普通字符(普通字符会原样输出) 1格式声明:%+d或i(整型),f(浮点型(double.float)),c(字符型),s(字符串型),e或E(指数型大写E会使输出的e也大写),o.x(分别代表八进制和十六进制x可以大写同样输出十六进制也是大写),u(无符号型),g或G(

Eclipse下printf和scanf的运行顺序问题

Eclipse下printf和scanf的运行顺序问题 Eclipse  宇托  2011-12-25  662浏览  去评论 在写一个C语言时,运行时发现scanf比printf先执行了,在网上找了一下资料,原来是输出缓冲区的问题.解决方法有两个,第一,设置缓冲区为空,即没有缓冲区:第二,每执行printf之后,强制缓冲区.具体方法如下: 在printf之前添加:setvbuf(stdout,NULL,_IONBF,0);设置缓冲区为空. 在每句printf之后添加:fflush(stdout

C语言中的printf(),sprintf(),scanf(),sscanf()

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致sprintf 比printf 有用得多. printf 语法: #include <stdio.h> int printf( const char *format, ... ); printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.返回

【转】stm32CubeMx上移植自己的printf()和scanf()函数

要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中.重定向是指用户可以自己重写C 的库函数,当连接器检查到用户编写了与C 库函数相同名字的函数时,优先采用用户编写的函数,这样用户就可以实现对库的修改了.为了实现重定向printf()和scanf() 函数,我们需要分别重写fputc()和fgetc() 这两个C 标准库函数. 一.移植printf()函数,重定向C库函数printf到USART1 int fputc(int ch, FIL

C语言-数据类型、常量、变量、变量作用域、printf、scanf函数

4.数据类型介绍 数据:文本数据.音频.视频.图像.数字 C语言中有5大数据类型:基本类型.构造类型.空类型.指针类型.自定义类型 基本数据类型: 整型    长整型long int    整型int(4)    端整型short int 实型    单精度float(4)    双精度 double(8) 字符型   char(1) 内存: 1> 内存分配:4G存储大小:4*1024*1024*1024Byte; 内存的基本单元为一个字节(就是8bit) 2> 内存区域:栈 (存放局部变量)

printf和scanf整理(后续填补)

scanf和printf头文件:<stdio.h> %d.%3d.%03d.%-3d区分 %d:以十进制形式输出整数(int) %3d:指定宽度为3,不足的左边补空格 %03d:一种左边补0 的等宽格式,比如数字12,%03d出来就是: 012 %-3d:左对齐,不足三位右边用空格填补

printf和scanf函数

一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据 1.用法 (1)1> printf(字符串) printf("Hello, World!"); 输出结果是: (2)printf(字符串, 格式符参数) // 使用常量作参数 printf("My age is %d\n", 26); // 也可以使用变量 int age = 17; pr