考研学习记录-c语言-2(持续更新)

C语言易忘知识点以及常见问题

目录

一、整型常量的不同进制表示

二、运算符

三、数组

四、解决scanf函数缓冲区吃回车问题

五、字符串相关函数(gets在C11标准中去除了,部分学校机试不可用)

六、指针


一、整型常量的不同进制表示

        1.零碎知识

                ①int类型为4字节,32位2进制,最高位为符号位,0为正数,1为负数;

                ②十进制转换二进制,不断除2,得商继续除,余数为对应2进制位,从低到高

二、运算符

        1.逻辑非 (!) > 算术运算符 > 关系运算符 > 逻辑与 (&&) 和逻辑或 (||)

        2.sizeof不是函数,是运算符

        3.|| 和 &&有需要注意的,当 || 左边的式子为真时,不执行右边的表达式,当 && 左边的式子为假时,不执行右边的表达式。

三、数组

        1.数组传参给子函数时,形参获取的是首地址(指针),无法在子函数里面用sizeof(数组名)语句获取数组中存放的数据的真正大小,因为真正获取到的是指针的大小(8字节)。

        2.scanf函数读入字符数组时,遇到空格会停止输入。

四、解决scanf函数缓冲区吃回车问题

        简单粗暴的方法:

	fflush(stdin);//直接清空标准输入缓冲区,让scanf没机会偷吃回车

五、字符串相关函数(gets在C11标准中去除了,部分学校机试不可用)

        1.strlen函数

                计算字符串长度,该返回值为长度值(其中不包含字符串的结束符“\0”)

        2.strcat函数与strcpy函数(这两个函数的第一个参数不得为字符串常量!!!,原因是都会把操作后的值给到第一个参数,而字符串常量没有地址,所以不行)

                ①strcat函数直接拼接第二个参数到第一个参数后面。

                ②strcpy复制替换(切记,是完全替换,就算被替换的字符串比替换的字符串长,其比它长出来的部分也会消失,如char a[5] = "abcd", char b[2] = "e", strlen(a, b),结果a数组变成"e",a比b长的部分"bcd"会消失,也就是说,b复制到a上,不仅是相同的长度对应字符会被替换,原字符串长出来的部分也会被替换为无)

        3.strcmp函数

                比较两个字符串的大小(原理是按每位字符的ASCII码比较大小,也可以简单理解为,按学习中的字典顺序,排得越后则越大),第一个参数的字符串大,则返回值为1,相等为0,小则为-1)

六、指针

        1.指针大小问题,若程序为64位,则寻址范围为64位即指针大小为8字节,若程序为32位,则寻址范围为32位即指针大小为4字节

        2.malloc动态内存申请。

                ①用malloc函数可以申请空间。用法为,先定义指针变量,然后敲入语句:指针变量 = (需要的指针类型)malloc(需要的大小),然后就能获取了。需要头文件stdlib。

字符型空间例子:

#include
#include

int main(void)
{
	char *c;
	c = malloc(4);//多一位存结束符
	c = "abc";
	printf("*c = %s\n", c);
	return 0;
}

运行结果:

考研学习记录-c语言-2(持续更新)_第1张图片

整型空间例子:

#include
#include

int main(void)
{
	int *c;
	c = malloc(4);//int一个数即占4个字节,先只给一个
	c[0] = 1;     //只有一个整型数据,只能赋值一个
	printf("*c = %d\n", *c);
	return 0;
}

运行结果:

                ②注意void指针类型不能偏移、如果是字符型指针,malloc要多给一位长度用来存结束符/0

你可能感兴趣的:(学习,c语言,开发语言)