**补充申明:Linux C基础笔记共分为四部分,第一部分是Linux下基本命令,以及vi编辑器的使用还有C中的数据类型,第二部分为运算符、常量变量和输入输出。第三部分是控制语句、数组、字符串函数。第四部分为指针、函数以及分配内存管理。在写完这四部分之后我会继续上传数据结构、IO、以及网络编程的学习笔记,大家如果有需要学习Linux下编程的可以关注一下,我会将我所有的学习笔记发布在此供大家一起学习。(在笔记里面会有一些其他博主的总结,如果涉及到实属抱歉,您可以通过邮箱联系我,我会及时修改。**[email protected])。
【0】运算符
算术运算符:+ - * / % ++ --
【1】关系运算符和逻辑运算符
他两主要用于判断,在条件语句当中经常使用
关系运算符
> < >= <= == !=
逻辑运算符
逻辑与:&&, 运算符两边都为真才为真
逻辑或:|| ,只要有一个为真就为真
逻辑反:!,原来为真则为假,原来为假,则为真
【2】位运算符
A = 0011 1100
位逻辑反 ~ ~ 1 = 0, ~0 = 1;
位逻辑与 & 0 & 0 = 0, 0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1;
位逻辑或 | 0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1;
位逻辑异或 ^ 0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 0;
左移 << A << 2 = 1111 0000
右移 >> A >> 2 = 0000 1111
【3】赋值运算符与赋值复合运算符
== 代表判断
= 代表赋值
赋值运算符为“=”,其运算的一般形式如下:
<左值表达式> = <右值表达式>
赋值复合运算符其运算的一般形式如下:
<变量> <操作符>= <表达式>
a + b => a += b;
a = a / b => a /= b;
+=: C += A 相当于 C = C + A;
-=: C -= A 相当于 C = C - A
*=: C *= A 相当于 C = C * A
/=: C /= A 相当于 C = C / A
%=: C %= A 相当于 C = C % A
<<=: C <<= 2 相当于 C = C << 2
>>=: C >>= 2 相当于 C = C >> 2
&=: C &= 2 相当于 C = C & 2
^=: C ^= 2 相当于 C = C ^ 2
|=: C |= 2 相当于 C = C | 2
【4】逗号运算符(“,”)
从左到右依次计算,最后表达式的值,作为整个表达式的值。
整个表达式的值就是最后一个表达式的值
但是前边所有的表达式都会被计算。
int a = 10, b = 5, c = 9;
这个不是逗号运算符,逗号运算符需要加括号
a = a + b + c, a+b, c;
a = ( c = a + b, c++, c = b + c);
a = 21;
【5】条件运算符"? :" – 三目运算符
条件运算符"? :"是一个三目运算符, 其运算的一般形式是:
<表达式1> ? <表达式2> : <表达式3>
执行过程:
先执行表达式1,如果表达式1为真,则执行表达式2,否则执行表达式3
等价于if..else...
if(表达式1)
{
表达式2
}
else
{
表达式3
}
【6】sizeof运算符
sizeof运算符运算的一般形式如下:
sizeof(<类型或变量名>)
是一个关键字,计算一个变量或者数据类型所占的内存空间的大小,以字节为单位。
注意:它只针对数据类型,而不针对变量!
【7】变量与常量
常量是指在程序运行期间其数值不发生变化的数据。
整型常量
C语言的整数可以是十进制数、八进制数和十六进制数。可以有一个后缀U(无符号)或L(长整形) 例如: 215U, 84L
浮点常量
浮点常量又称为实数,一般含有小数部分。
在C语言中,实数只有十进制的实数,它又分为单精度实数和双精度实数,它们的表示方法基本相同。实数有两种表示方法, 即一般形式和指数形式。
float或者double定义的变量所对应的数据
科学计数法:3.5e+5 = 350000 3.5e-5 = 0.000035
字符常量
所谓字符常量是指一个单一字符, 其表示形式是由两个单引号包括的一个字符。
常用转义字符
\\ \ 字符
\' ' 字符
\" " 字符
\r 回车符 (跳到本行开头)
\n 换行
\t 水平制表符
\b 退格符
字符串常量
所谓字符串常量是指用双引号括起来的一串字符来表示的数据。
a 变量
'a' 字符
"a" 字符串,每一个字符串都会有一个结束标志,'\0'
大小写字母A和a差32;A=65; a=97;
数字0和字符‘0’差48 ‘0’=48;
空格为 32;
常量定义
1.#define预处理器 #define 符号名 替换列表 (替换列表可以是任意字符、数字、字符串、表达式等)
#define M(x,y,z) x*y+z
main()
{ int a=1,b=2, c=3;
printf("%d\n", M(a+b,b+c, c+a)); }
输出结果为12
2.const const int a = 10; a的值不能被修改
const指针 const int *p = a 指针指向的内容是只读的 (无法被修改) a不可改变,p可改变
int * const p = a 指针本身是只读的(无法被修改) p不可改变,a可改变
变量:static 静态变量说明符 静态局部变量:在函数内使用,退出函数不能使用
静态全局变量:只能在定义变量文件内使用
指针函数中延长生命周期
修饰函数,
extern 全局变量声明 可以在其他文件使用该变量,
【8】格式输入输出函数
printf/scanf
#include
int printf(const char *format, ...(arg));(文件末尾详细解读了各种输出格式)
功能:按照一定的格式将数据输出到终端
参数:
format:格式控制串
%d 十进制整数
%u 无符号的十进制整数
%o 八进制整数
%x 十六进制整数
%c 字符数据
%s 字符串
%f 浮点类型
%% 百分号本身
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
附加格式说明符
m 输出数据域宽,数据长度
int scanf(const char *format, ...(arg));
功能:按照格式从终端输入数据
参数:
format:格式控制串
%d 十进制整数
%c 字符数据
%s 字符串
%f 浮点类型
arg:可变参
如果要将输入的数据保存在arg变量里面,需要传arg的地址
返回值:
成功输入的个数
垃圾字符的回收:
在输入多个字符的时候,往往会产出空格以及回车这个垃圾字符,所以需要处理
scanf("%c%c%c", &a, &b, &c);
方法1:使用空格隔开
scanf("%c %c %c", &a, &b, &c);
方法2:使用%*c隔开,但是那次只能回收一个
scanf("%c%*c%c%*c%c", &a, &b, &c);
方法3:使用getchar来回收垃圾字符
scanf("%c", &a);
getchar();
scanf("%c", &b);
getchar();
scanf("%c", &c);
getchar();
输入字符串时,注意不能超过其规定的字符串的字节数的范围
如果想输入一个带空格的字符串,使用%[^\n]
getchar() 读取一个字符
putchar() 输出一个字符
gets() 读取一个字符串
puts() 输出一个字符串
strcpy(s1, s2); 复制字符串 s2 到字符串 s1。
strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾。
strlen(s1); 返回字符串 s1 的长度。
strcmp(s1, s2);如果 s1 s2 是相同的,则返回 0;如果 s1s2 则返回大于 0。
【附录】printf 输出格式(转载CSDN某博客,具体是哪位大神的我也记不清了,当时逛博客的时候发现的,如有任何问题可以给我发邮箱,我会随时回复)
---------------------------------------
格式字符
格式字符用以指定输出项的数据类型和输出格式。
①d格式:用来输出十进制整数。有以下几种用法:
%d:按整型数据的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。
②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。
例:
main()
{ int a = -1;
printf("%d, %o", a, a);
}
运行结果:-1,177777
程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。
③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式 输出。
④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。
⑤c格式:输出一个字符。
⑥s格式:用来输出一个串。有几中用法
%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m ,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n 个字符正常输出。
⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
%f:不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
⑧e格式:以指数形式输出实数。可用以下形式:
%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数 据所占的宽度。
⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。
---------------------------------------
关于printf函数的进一步说明:
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
printf("%f%%", 1.0/3);
输出0.333333%。
---------------------------------------
对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位.
对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.
(验证成功)
今天()又看到一种输出格式 %n 可以将所输出字符串的长度值赋绐一个变量, 见下例:
int slen;
printf(“hello world%n”, &slen);
执行后变量被赋值为11