C语言知识点补充
关于'\0'与'0'与0与NULL
(1)'\0'是字符串的结束标志其ASCII值为0.(如果字符串中有'\0'那么此处就是字符串的结束位置,如果没有结尾默认'\0')
(2)'0'是单个的数字字符ASCII值为48.
(3) 0是数字0.
(4) NULL是宏定义的0.
在C语言中,NULL和0的值都是一样的,NULL用于指针,0用于数值。对于字符串的结尾,使用'\0',它的值也是0,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值.
补码
(1)原码:最左边的一位即最高位为符号位,其余各位为数值本身的绝对值(最高位为0为整数).
(2)反码:正数的原码与补码相同,负数的符号位(最高位)为1,其余对原码取反.
(3)补码:正数的原码、反码、补码相同。负数的符号位(最高位)为1,其余的为原码取反,再加1.
逻辑运算
(1)&& 逻辑与
运算结果0或1,双目运算,自左向右结合.
(2)|| 逻辑或
运算结果0或1,双目运算,自左向右结合.
(3)! 逻辑非
运算结果0或1,单目运算,自右向左结合.
&&和||的短路原理
&&前面是0时,&&符号后面的不计算.
||前面不是0时,||号后面的不计算.
位运算和移位运算
(1)& :如果两个相应的二进制位都为1,则该位的结果值为1;否则为0.
(2) | :两个相应的二进制位中只要有一个为1,该位的结果值为1.
(3)^ :若参加运算的两个二进制位同号则结果为0(假)异号则结果为1(真).
(4)~ :~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0.
(5)>> :表示将a的各二进制位右移N位,移到右端的低位被舍弃,对无符号数,高位补0.
(6)
注意
a.任何一个数和0异或是它的本身,和自身异或为0.
b.左移运算:x
c.右移运算:x >> y.将x右移y位,这需要区分x是有符号数还是无符号数。在x是无符号数时,只需将x的最右边的y位丢弃,在左边补上y个0。在x是有符号数时,又分为x是正数还是负数。正数时,同无符号数的处理相同;负数时,将将x的最右边的y位丢弃,在左边补上y个1.
转义字符
转义字符是C语言中表示字符的一种特殊形式。通常表示ASCII中不可打印的控制字符和特定字符.
(1)特殊的字符常量以”\”开头.
(2)一般所有的字符都可以用转义字符表示.
(3)\ddd表示3位八进制代表的转义字符。如:\101为A(101转化为十进制为65).
(4)\xhh或\Xhh(hh为十六进制数)表示两位十六进制代表的转义字符.
注意
转义字符只能使用小写字母,每个转义字符只能看作一个字符.
赋值表达式
(1)赋值运算符具有右结合性,右边的赋给左边.
(2)当等号两边的类型不同时,将要进行类型转换.
转换规则
a.实型赋给整型,舍去小数部分.
b.整型赋给实型,增加小数部分“.000000”.
c.字符型赋给整型,将ASCII的值放到整型的低八位.
d.整型赋给字符型,将十六进制的低八位(二进制)赋给字符.
字符串的存储长度
(1)一般字符串的存储长度为字符串的长度个数加1(因为\0作为字符串的结束符号也占空间).
(2)在计算字符串的长度的时候注意八进制十六进制的转义字符表示算一个字符.
sizeof关键字的用法
(1)printf(“%d”,sizeof(int));
(2)printf (“%d”,sizeof(变量));
(3)printf (“%d”,sizeof(数组名));
三目运算符
(1)(p>0?p/3:p%3)
运行的顺序:首先判断p>0成立吗(?),如果成立执行“:”左边的(p/3),否则执行“:”右边的(p%3).
关于!a与a
(1)if(!a)等价于if(a==0)只有当a等于0时!a才为真.
(2)if(a)等价于if(a!=0)只有当a不等于0的时候才为真.
static
(1)静态的全局变量.
(2)如果不初始化值为变量类型的0.
(3)分配的内存一直保留相当于全局变量.
代码块作用域
在{}中的作用域
int main(void)
{
int i = 4;
{
int i = 2;
printf("%d\n",i);
}
printf("%d\n",i);
return 0;
}
程序的输出结果是2 4.
指针作用
(1)表示复杂的数据结构.
(2)快速传递数据.
(3)使函数返回多个值.
(4)直接访问硬件.
(5)能方便的处理字符串.
(6)变向对象中引用的基础.
(7)指针变量只占4个字节,只保留变量的首位一个字节,但是地址需要4个字节才能保存.
typedef
Typedef int NUM[10];
NUM a = ;//等价于int a[10].
进制转换
小数的二进制:采取乘2取整的方法,然后顺序排列.
例如:0.8125的二进制为0.1101.
注意:不一定完全精确转换,转换到小数点后某一位即可.
ASCII码
0-31分配给控制字符,用来控制打印机等一些外围设备.
32-126分配给了键盘上能找到的字符.
127代表delete命令.
注意
a的ASCII值为97.
A的ASCII值为65.
0的ASCII值为48.
由于a和A的ASCII,并且字母的顺序性,可以知道大写字母和小写转换的方法.
大写转换为小写:if (ch >='A' && ch
小写转换为大写:if (ch >='a' && ch C语言函数
math函数
(1)double sqrt(double x); //求一个数的平方根.
(2)double fabs(double x);//求一个表达式的绝对值.
(3)double pow(double x, double y);//求xy.
(4)double exp(double x);//求ex(e为常数2.71828).
(5)double acos(double x);//三角函数.
(6)double floor(double x);//求出不大于x的最大整数.
(7)double fmod(x,y);//求x/y的余数.
(8)double log(double x);//求ln(x).
随机数
(1)int rand(void);//生成一个0到RAND_MAX的随机整数.
(2)void srand(unsigned seed);//用seed为随后的随机数生成设置种子值.
文件函数
(1)fopen (文件名,文件使用模式);//文件打开函数.
(2)fclose (fp);//文件关闭函数.
(3)fwrite (buf,size,count,fp);//文件数据块输出函数.
(4)fread (buf,size,count,fp);//文件数据块输入函数.
(5)ftell (fp);//取文件位置指针的当前值.
(6)fseek (fp,offset,from);//移动文件位置指针.
(7)rewind(fp);//置文件位置指针与文件开头.
内存分配
(头文件ANSI建议在stdlib.h但是一般都在malloc.h中)
(1)void *malloc (unsigned size);//动态内存分配 .
(2)void *calloc (unsigned n,unsigned size); (分配n个size大小的空间).
(3)void *realloc(void *p,unsigned size);//将p指向的空间改为size大小.
PS:关注我获取其他的C语言基础知识。如果需要C语言资料的请私信我,回复C语言就可以得到C语言资料。如果需要别的C语言资料请留言。
领取专属 10元无门槛券
私享最新 技术干货