学习C/C++必须会的一些知识点

3 篇文章 0 订阅

不定时更新

1.位运算的性质

异或
a ^ 0 = a,a ^ a = 0
异或运算具有交换律
a ^ b ^ c = b ^ c ^ a = c ^ a ^ b
// 1 0110
// 0 1010
与或运算
x & 0 = 0 , x & 1 = x

2.基础知识注意点

1char arr1[] = "abc";
char arr2[] = { 97,'b','c'};
printf("arr1的大小为=%d",sizeof(arr1)};
//abc\0,其中\0也是一个字符所以也算一个字节,所以四个字节

printf("arr1的大小为=%d",sizeof(arr1)};
//只有'a','b','c'三个元素,三个字节。
//注意sizeof是操作符而不是个函数,计算变量/类型所占空间的大小

printf("arr1的长度为=%d",strlen(arr1));
//arr以'\0'作为结束标志

printf("arr1的长度为=%d",strlen(arr1));
//arr2从'c'后开始寻找\0,但不知道什么时候找到,所以结果为随机值
2、
以下将R进制数字转换为10进制
/ddd(其中d表示的为八进制数字)
printf("%d",'\132');//根据权重\132 = 1 * 8 ^ 2 + 3 * 8 ^ 1 + 2 * 8 ^ 0 = 90
/xdd(其中d表示的为十六进制数字)
printf("%d",'\x32');//3 * 16 ^ 1 + 2 * 16 ^ 0 = 50	
3、
按位操作符
按位指的是按照二级制位
& 按位与-1 & 0 = 0
| 按位或 -1 | 0 = -1
^ 按位异或 5 ^ 0 = 5
~ 按位取反 ~-1 = 0
! 逻辑反操作 !1 = 0

4int a = 0;
	printf("%d",sizeof(int)); 
	printf("%d",sizeof a);
	printf("%d",sizeof (a));
	printf("%d",sizeof int);//在32位机器,上面的三种都可以计算位4
	//但最后一种却跑不过去
5、
对于continueint i = 0;
	for(;i < 10; i += 2)
	{
		if ( i < 5)
			continue;//满足条件,跳过本次循环,回到循环起始位置
			//并完成i += 2的操作
	}
对于break;
	int i = 0;
	for(;i < 10; i += 2)
	{
		if ( i < 5)
			break;//满足条件,永久终止本次循环,调到循环体外部
			//不完成i += 2的操作
	}
6int x = 10;
int* p = &x;
(*p)++*p++
//根据*和++优先级,上式是两码事
//前者表示先使用*p,后*p这个整体加1
//后者表示先使用p p呢又和*结合,完之后再指针p加1
7#include<stdio.h>
int num  = 10;
int main()
{
	int num = 1;
	printf("num = %d",num);//打印1,因为局部变量优先
	return 0;
} 
8、
注意定义一些变量,最好放到main函数前面,这是有c语言语法规定的
不然你会出现一些莫名其妙的错误,就是有可能是因为上面的影响
9#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	if (a == 1)
		if (b == 1)
			printf("haha\n");
	else
		printf("lala\n");
	return 0;
	//打印lala,这里需要主义的是,if跟它最近的else匹配
	//不要被不舒服的编程风格给迷惑
}
9、
判断语句时下面的两种情况是有大不同的
if(sum = 3);//赋值号
if(sum == 3);//这才是判断相等

10、
①
swtich 语句中关键字不包含continue
可包含关键字 if, break,defaultbreakswitch语句中跳出到整个switch语句外。
每个case下面的代码中没有break,就依次往下执行,直至碰到break为止。
每个case下面的代码超过一句语句的用大括号括起来,就会执行对于case语句下面的全部代码了。
③
switch(c)中c可以为int,long,char,但是不能位浮点型数据类型

11、
在不同位数的机器下,指针变量的大小也是不相同的
例如32--sizeof(char*)占四个字节大小
又如64--sizeof(char*)占八个字节大小

12、
关于whilefor循环语句中,条件表达式执行的次数比循环体执行次数多一次

13goto语句的最佳用处实在跳出多层循环中的

14struct Stu
{
	char name[20];
	int age;
	int StuNumber;
};//分号不能少

15、
一个程序中的main位置可以放在任意位置

16、
逗号表达式要注意
①int arr[] = { 1,2,(3,4),5};
②函数调用Fun((v1,v2),(v3,v4),v5,v6);//留意逗号表达式--四个参数

17、
函数中传递结构体类型时,传递结构体指针,而不是结构体本身,
这样可以防止传参过程中的压栈开销太大,导致计算机运行速率降低。
栈的特点:先进的元素后出,后进的元素先出
其中插入一个元素称作:压栈
删除一个元素称作:出栈


18char* p = "abcdef";//常量字符串,p存放的为首元素a地址
char p[] = "abcdef";//数组,p存放的是整个数组的地址

若有char* p1 = "abcdef";
char* p2 = "abcdef";
则 p1 = p2;//即同一个地址

如果有char p1[] = "abcdef";
char p2[] = "abcdef";
则p1 != p2;//即不相同的地址

19、
赋值表达式的值就是所附的值
int i;
	printf("%d",i = 13);//打印13

20、
要求:多次输入并打印字符
①
while(~(ch = getchar()))//~表示的为按二进制按位取反
//上面遇到Ctrl + z停止,原因为 Ctrl + z 为文件结束符--EOF结束表示,
//其本质为 -1 ,再结合-1在内存中的存储补码为32为全1
//再有个按位取反~符就为全0就,while中的表达式为假跳出循环
	{
		putchar(ch);
	}while((ch = getchar()) != EOF)
	{
		putchar(ch);
	}

21、
要求:让我们输入一个密码,并输入Y 或 N表示确认
scanf("%s",password);//这边把换行符前面的内容读取完之后
//内存缓冲区,还有个\n,如果没有下一步,吃掉换行符的操作,
//那我们确认密码是就肯定是N--放弃确认了

while((ch = getchar()) != '\n')//吃掉换行符
int ret = getchar();//这边是用来确认密码的

22、
一般情况下,我们在进行判断语句的操作时
我们最好采用以下的方法
if(5 == i)
//即常量放到左边,由于如果我们写成5 = i,那么就跑不去

23Sleep(1000);//单位毫秒,并引入头文件windows.h
system("pause")//停顿,头文件stdlib.h
system("cls");
//执行系统的一个函数--清空屏幕,引入头文件#include<stdlib.h>

24int a[10] = { 1 };
//第一个元素为1,其他为默认初始化为零

25、取余运算中注意:

该运算只适合用两个整数进行取余运算,如:10%3 = 1;
而10.0%3则是错误的;运算后的符号取决于被模数的符号,如(-10)%3 = -1;10%(-3) = 126printf("x%y=%d\n",x%y);
这种不运行的原因:程序将%y看作格式化符号,所以会出现错误。
改正的方法使用%%,其中输出一个%,转义: printf("x%%y=%d\n",x%y);
即防止转义: printf("x%%y=%d\n",x%y);

27、字符09
对应的ASCII范围为:48~57

28、
三目操作符(? : );"?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。
其结合方向是自右至左,例如,a ? b : c ? d : e将按a ? b : (c ? d : e)执行。

29、
strlen返回值为无符号整形,所以strlen(1) -strlen(2) >= 0

30、
函数调用中出现的参数,类型跟函数声明中的类型保持一致

31%-3d 
定于输出格式。d表示输出整数,3表示输出的数字占3个字符的位置。
-号表示对齐方式。是左对齐。如果是+号或者不写,表示右对齐。

32autoregister属于动态存储分配
只有在使用中才会为该类型变量分配内存存储单元

33、
在 C 语言中,形参的缺省存储类是auto34、
对于匿名结构体
(1.)匿名创建了两个结构体变量,省略了标签,则尽管结构体里面成员类型一样,
还是会被系统当成不一样的两个类型
35、
C中三种预处理语句:宏定义,文件包含,条件编译
36、
注意strcat(s1,s2)将s2追加到s1第一个\0出现位置。
37%p表示输出这个指针,
%d表示后面的输出类型为有符号的10进制整形,
%u表示无符号10进制整型,
%lu表示输出无符号长整型整数 (long unsigned)
38puts()函数用来向标准输出设备屏幕输出字符串并换行。
39、
scanf 扫描到特定分隔符(空格,换行符, TAB 符等)会终止。
40、
C语言中的变量名,不能以数字开头
不能是关键字
41、静态局部变量,第一次调用会初始化,接下来再使用的时候,保留原值
42、原码是由数据以二进制写出来,反码是原码的符号位不变,其他位按位取反,补码是在反码的基础上加一
43'0'ASCII码是48'\0'ASCII码是0
44、#include<stdbool.h>
使用true和false来表示真假,即可以使用bool类型数据

45、一个数字的补码取反与原数相加等于-1
	例如 //设比特位-2补码1000 0010
        //其补码为1111 1110
        //取反0000 0001
        //加上原数为 -1
461000 0000, 0000 0000, 0000 0000, 0000 0000这个是-2^31=-2147483648的补码

47、#define led P2
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值