黑马程序员——C语言基础-进制内存分析及printf、scanf

时间:2022-04-11 00:26:28

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

一、进制

1.什么是进制

是一种计数的方式,数值的表示形式 
汉字:十一   十进制:11  二进制:1011  八进制:13 
多种进制:十进制、二进制、八进制、十六进制。也就是说,同一个整数,我们至少有4种表示方式

2.二进制

1> 特点:只有0和1,逢2进1

2> 书写格式:0b或者0b开头
3> 使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储
4> 二进制和十进制的互相转换
5> n为二进制位所能表示的数据范围(不考虑负数):0~2的n次方-1

3.八进制

1> 特点:0~7,逢八进一
2> 书写格式:0开头
3> 八进制和二进制的互相转换


4.十六进制

1> 特点:0~F,逢十六进一
2> 书写格式:0x或者0X开头
3> 十六进制和二进制的互相转换


二、变量的内存分析

1.字节和地址

1>内存以字节为单位,内存的每一个字节都有一个唯一的编号,这个编号就称为地址。

2> 不同类型占用的字节是不一样的,数据越大,所需的字节数就越多

 

2.变量的存储

1>变量类型的作用

变量类型决定了变量所占用的存储空间

2>变量占用多少存储空间

黑马程序员——C语言基础-进制内存分析及printf、scanf

3>变量实例

<span style="font-family:Times New Roman;">#include <stdio.h>
int main()
{
int b = 10;
int a = 20;
return 0;
}
</span>

如果这样定义变量的话

(1)内存由大到小寻址,优先分配内存地址较大的字节给变量。  b的内存地址比a大

(2)每个变量都有自己的地址:第一个字节的地址就是变量的地址

4>查看变量的内存地址

<span style="font-family:Times New Roman;">#include <stdio.h>
int main()
{
int a;
printf("a的地址是:%p\n", &a);
return 0;
}</span>

%p是用来输出地址的,&是取址运运算符,&a表示取出变量a的地址

5>注意

<span style="font-family:Times New Roman;">#include <stdio.h>
int main()
{
int a;
printf("a的值是:%d\n", a);
return 0;
}</span>

在变量未经初始化之前,不要尝试使用变量的值,因为它此时里面存储的不一定是什么值

 

三、printf和scanf函数

1.简介

printf和scanf函数为重要的文字交互函数,printf用于输出字符串,scanf用于扫描用户输入,是终端界面最常用的两个函数。
这两个函数都包含在stdio.h标准输入输出头文件中,在使用中需要包含。
在学习这两个函数前,我们先要了解一下字符串。

2.字符串的认识

在c语言中没有字符串的概念,我们所接触到的基本数据类型中只有int、char、Bool、float、double等类型,而字符串是由一系列的字符所组成,为了表示字符串,需要用到字符数组,在一个字符数组中,前面的元素为char类型(各占8个bit),最后一位存储一个结束标志\0,这样以来,程序就可以通过这个字符数组的首地址(数组名标识符)和结束标志(\0)从内存中读取该字符串。

3.占位符的认识

占位符是一种特殊的运算,用于将一些其他数据类型的数据转换为特殊的字符格式,嵌入到某个字符串中。有如下几种:
占位符 作用
%a,%A 读入一个浮点值(仅C99有效)
%c 读入一个字符
%d 读入十进制整数
%i 读入十进制,八进制,十六进制整数
%o 读入八进制整数
%x,%X 读入十六进制整数
%s 读入一个字符串,遇空格、制表符或换行符结束。
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。
%p 读入一个指针
%u 读入一个无符号十进制整数
%n 至此已读入值的等价字符数
%[] 扫描字符集合
%% 读%符号

4.printf函数

该函数接受一个字符串作为参数,其作用是将传入的字符串打印在终端窗口上。
字符串可以包含占位符。
举例如下:
<span style="font-size:14px;">  <span style="font-size:14px;">#include <stdio.h></span></span><br style="font-size:14px;" /><span style="font-size:14px;">int main()  </span><br style="font-size:14px;" /><span style="font-size:14px;">{  </span><br style="font-size:14px;" /><span style="font-size:14px;">    int count=100;  </span><br style="font-size:14px;" /><span style="font-size:14px;">    char grade='B';  </span><br style="font-size:14px;" /><span style="font-size:14px;">    float height=1.78f;  </span><br style="font-size:14px;" /><span style="font-size:14px;">    double pi=3.141592654;  </span><br style="font-size:14px;" /><span style="font-size:14px;">      </span><br style="font-size:14px;" /><span style="font-size:14px;">    //输出整数,%d也可  </span><br style="font-size:14px;" /><span style="font-size:14px;">    printf("数量为 %i \n",count);  </span><br style="font-size:14px;" /><span style="font-size:14px;">      </span><br style="font-size:14px;" /><span style="font-size:14px;">    //输出字符  </span><br style="font-size:14px;" /><span style="font-size:14px;">    printf("等级为 %c \n",grade);  </span><br style="font-size:14px;" /><span style="font-size:14px;">      </span><br style="font-size:14px;" /><span style="font-size:14px;">    //输出两位小数,默认6位  </span><br style="font-size:14px;" /><span style="font-size:14px;">    printf("身高为 %.2f 米\n",height);  </span><br style="font-size:14px;" /><span style="font-size:14px;">      </span><br style="font-size:14px;" /><span style="font-size:14px;">    //输出多位小数,.10表示总共10位数  </span><br style="font-size:14px;" /><span style="font-size:14px;">    printf("圆周率 %.10g \n",pi);  </span><br style="font-size:14px;" /><span style="font-size:14px;">      </span><br style="font-size:14px;" /><span style="font-size:14px;">    return 0;  </span><br style="font-size:14px;" /><span style="font-size:14px;">}  </span><br style="font-size:14px;" /><span style="font-size:14px;">在该例子中,定义了int、char、float、double等数据类型,他们可以通过占位符嵌入到字符串中,字符串中的\n为制表位,用于换行输出。</span><br style="font-size:14px;" /><span style="font-size:14px;">输出结果如下:</span><br style="font-size:14px;" /><span style="font-size:14px;">[html] view plaincopy</span><br style="font-size:14px;" /><span style="font-size:14px;">数量为 100   </span><br style="font-size:14px;" /><span style="font-size:14px;">等级为 B   </span><br style="font-size:14px;" /><span style="font-size:14px;">身高为 1.78 米  </span><br style="font-size:14px;" /><span style="font-size:14px;">圆周率 3.141592654   </span>

5、scanf函数

<span style="font-family:Times New Roman;">#include <stdio.h>
int main()
{
int age;
scanf("%d", &age);
return 0;
}


</span>

1> scanf函数执行时,程序会卡住,等待用户键盘输入,scanf的第1个参数是"%d",说明要求用户以10进制的形式输入一个整数。这里要注意,scanf的第2个参数传递的不是age变量,而是age变量的地址&age&C语言中的一个地址运算符,可以用来获取变量的地址

2> 输入完毕后,敲一下回车键,目的是告诉scanf函数我们已经输入完毕了,scanf函数会将输入的值赋值给age变量

scanf函数可以同时接收n个数值,但是需要输入方式跟定义方式匹配。

<span style="font-family:Times New Roman;">//一次输入多个变量,用横线 '-' 隔开
scanf("%d-%d-%d", &a,&b, &c);
// 输入格式:10-14-20

//一次输入多个变量,用逗号 ',' 隔开
scanf("%d,%d,%d", &a,&b, &c);
// 输入格式:10,14,20

//一次输入多个变量,用井号 '#' 隔开
scanf("%d#%d#%d", &a,&b, &c);
// 输入格式:10#14#20

//一次输入多个变量,用字母 'x' 隔开
scanf("%dx%dx%d", &a,&b, &c);
// 输入格式:10x14x20


//一次输入多个变量,用空格 ' ' 隔开
scanf("%d %d %d", &a,&b, &c);
//输入格式:10 14 20
 </span>

6.注意

scanf的第一个参数中不要包含\n,比如:

<span style="font-family:Times New Roman;">#include <stdio.h>
{
scanf(“%d\n”, &a);
return 0;
}</span>

这将导致scanf函数无法结束