没有内存空间。 不能提升。 volatile int flg = 0; 定义一个寄存器变量。 没有内存地址。 register int a = 10; // 把数直接存到寄存器里面extern:表示声明。
const:限定一个变量为只读变量。
volatile: 防止编译器优化代码。
register: 一般在编写底层的时候,应用开发使用很少。
C语言中,用双引号引着的一串字符,称之为字符串。
一定有一个结束标记’char ch = ‘A’;
'
‘a’
一个字节
"abc" --> 'a''b''c''\0'
“a”('a''int')
不等价 ,左边是字符,右边是字符串
从键盘接收用户输入。
(1) 接收 整数 %d
, a; bscanf c( 创建变量空间, 等待接收用户输入。
"%d %d %d",&, &a, &b) ;cchar,
(2) 接收 字符 %c
, a; bscanf c(
"%c %c %c",&, &a, &b) ;cchar[
(3) 接收 字符串 %s
10 str];scanf( // 定义一个数组,用来接收用户输入的 字符串。
中括号内必须填写数字,才能告诉字符串如何开辟大小
"%s",); strchar= // 变量名要取地址传递给 scanf, 数组名本身表示地址,不用 & 符。
【注意】
1) scanf 具有安全隐患。
如果存储空间不足,数据能存储到内存中,但不被保护。
【空间不足不要使用】
2) scanf 函数接收字符串时, 碰到 空格 和 换行 会自动终止。
不能使用 scanf 的 %s 接收带有空格的字符串。
例:当输入"hello world"时,会输出"hello"
将 #define _CRT_SECURE_NO_WARNINGS 添加到程序 第一行。
解决scanf 4996错误
2.printf函数: 'a' ch ; //字符char [
] str="hello world" ; // 数组,一个11位printf (
"ch = %c\n",); ch// c是字符printf (
"str = %s\n",); str// s是字符串char [
2 str2]='h' , { 'e'}; // 这个后面没有‘printf’,打印完he之后就会一直打印直至出现(截至,就会出现乱码 "str2 = %s\n" ,
);// he烫烫烫烫烫烫烫烫烫烫烫烫烫i谍\pchar str2[3 ]
= str1'h','e' , { '}';// 这里有'printf',打印到'('截止,所以输出是he"str1 = %s\n", ); // he
%s %d str1打印整数 %c 打印字符
%x | 打印16进制数 |
%u | 打印字符串, 挨着从字符串的第一个字符开始打印,打印到’\0’结束。 |
打印无符号 | %m.n: |
%0m.nf: | %% |
%Ns | %0Ns |
%-Ns | |
打印实型时用到,一共有 m 位(整数、小数、小数点),n位小数。 | |
其中 f:表示打印实型,一共有 m 位(整数、小数、小数点),n位小数。 0:表示不足 m 位时,用0凑够m位。 | |
显示一个%。 转义字符’’ 对 % 转义无效。 | |
显示N个字符的字符串。 不足N用空格向左填充。 | |
显示N个字符的字符串。 不足N用0向左填充。 | |
显示N个字符的字符串。 不足N用空格向右填充。 |
输出一个 字符 到屏幕。
直接使用 ASCII 码。
不能输出字符串。
10既不是一个有效字符,也不是一个有效字符串。
有效字符;,有效字符串++
常用;;来打印换行。
// a = a+1;也可以打印换行
从键盘获取用户输入的 一个字符。
返回该获取的字符的 ASCII 码。
先 * / % 后 + -
除法运算后,得到的结果赋值给整型变量时,取整数部分。
除0 :错误 *** 作。
不允许。
对0取余:错误 *** 作。
不允许。
不允许对小数取余。
余数不能是 小数。
35 % 3.4;
对负数取余,结果为余数的绝对值。
10 % -3; --》 1
++ 和 --:后缀优先级高于前缀前缀自增、自减:先自增/自减, 在取值。
int a = 10;
++a; // a = a+1;
后缀自增、自减: 先取值, 再自增/自减。
// a = 10,b=20 a printf ("a = %d"
a,++ )
;
// 先取值给%d,再自增 10printf("a = %d" a,); //11
printf("b = %d", a++) ;
// 先自增,再取值给%d 21printf("b = %d" ,b); // 21
int=5; b+=10 ;
赋值运算:
// a = a+10; a -= 30;
a // a = a-30; %=5 ;
a // a = a % 5; 13< <
a 16 ;== 13
比较运算符:
== 判等。
!= 不等于.
< 小于
<= 小于等于
> 大于
>= 大于等于
&& < var 16 ; (计算机中不允许)int => var > 10 ; var int =0
逻辑运算符:
0为假,非0为真。
(1)
逻辑非:! 非真为假, 非假为真。
; a printf ("!a = %d"
, b ! );
// 0printf("!b = %d" ,a!) ;
// 1int=10 ;bint= 0
逻辑与: &&(并且) 同真为真,其余为假。
逻辑或:|| (或) 有真为真。
同假为假。
; a printf ("%d"
, b && );
// 不同时为真,所以结果是假printf("%d" a , b||) ;
// 有一个为真,结果为真int=10 a , b=20 ,
三目运算符: ? :
表达式1 ? 表达式2 : 表达式3
表达式1 是一个判别表达式。
如果为真。
整个三目运算,取值表达式2。
如果为假。
整个三目运算,取值表达式3。
默认结合性。
自右向左。
= a30;int b=(= c1,=
2 x , =a 5 ); b // “,”运算过程是从左到右,x的值不断被覆盖,“,”运算优先级别最低 printf( c "x = %d\n" ,); //5
printf("a = %d\n", x); //1
printf("b = %d\n", a); //2
printf("c = %d\n", b); //5
int=3; cfloat= 3.14
运算符优先级:
[]() > ++ -- (后缀高于前缀) (强转) sizeof > 算数运算(先乘除取余,后加减)> 比较运算 > 逻辑运算 > 三目运算(条件运算)> 赋值运算 > 逗号运算
由赋值产生的类型转换。
小–》大 没问题。
大 --》 小 有可能发生数据丢失。
* r * ;// 得到的结构是double(编译器自动完成),但是最后赋值给了float,完成了一种赋值类型转换
int s = 321 ; r char r= ;
```
```c
printf a ( "ch=%d\n",
) ch ; a// char=65
256 128 64 32 16 8 4 2 1
321: 1 0 1 0 0 0 0 0 1 9位
char ch = 0 1 0 0 0 0 0 1 8位
float=3.6 ch;int =
4
强制类型转换:
语法: (目标类型)带转换变量 或 (目标类型)带转换表达式
; price double =*
; weight double =(
int sum ) price * weight;
printf sum2 ( "价格:%f\n",)price ; weight// 14.400000
printf("sum1:%d\n", sum(int )
);// 这里的Int一定要带括号,不然会报错 sum1:14printf ("价格:%f\n",sum); // 价格:12.000000,这里只是转price,因为()的优先级高于*
sum2
大多数用于函数调用期间,实参给形参传值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)