1.欲戴王冠必承其重

2. ++i和i++只在赋值方面有区别

3.异或,相同为假,不同为真

4.x*=y+z等价于x=x*(y+z)

即复合的赋值运算中,等号右面的表达式带括号。

5.%2c%3c%4c

若输出abcdefgh

输出acf

6.按位与&左右同时检查。

逻辑与&&先检查左值,在检查右值。

逻辑或||先检查左值,左值真,不检查右值;

左值假,检查右值。

&判断的过程如1&3à

其实是二进制位操作001

011

001==1

所以1&3是真

0&3à

000

011

000==0

所以0&3为假

7.在求解一个数各个位置的数字时,

可以通过“/”和“%”混用,快速求解

如4567求解百分位

4567%1000/100

8.常变量的值不会改变

const int a=3;

9.++k自带赋值功能,所以以下代码与想表达意思不同

int k, sum=0;

for (k = 1; k <= 5; k++)

sum = sum+k * (++k);

printf("%d", sum);

10.升序是小的在上面

11.字符数组进行赋值时,scanf函数或gets函数整体赋值,要注意scanf和gets函数的区别,在对字符串赋值时,scanf函数不能出现空格(系统把空格字符作为输入的字符串之间的分隔符)

12.scanf(“%s”)如果输入时结尾用回车键确认,则输入缓冲区中有一个回车需要被吃掉。如果有空格将输入的分成几部分,则只输入空格之前的部分,其他的在缓冲区内,可以通过

while(ch=getchar()!=’\n’)

{

;

}

来吞掉后面的字符。

其中如果通过

Scanf(“%[^\n]”,arr)进行输入,则与

Gets(arr)相同,意为遇到\n后停止

13.二分查找算法

数组内数字按大小有序排列,

取中间数与要查找的数比较

通过比较结果确定下一范围

14.计算数组大小

sizeof(arr)/sizeof(arr[0])

//其中在函数中不可以计算数组大小,因为实参传递给形参的实际上是数组首地址,是一个指针,占四或八个字节,在主调函数中求得。

//二维数组行数

Sizeof(arr)/sizeof(arr[0])

二维数组列数

Sizeof(arr[0])/sizeof(arr[0][0])

字符数组最右边下标

sizeof(arr)/sizeof(arr[0])-1

字符串数组最右边字符下标

sizeof(arr)/sizeof(arr[0])-2

或strlen(arr)-1

15.<windows.h>

Sleep();//括号内毫秒,指休息几毫秒

<stdlib.h>

system(“cls”);执行系统命令的一个函数—cls—清空屏幕

16.二进制转化成八进制

二进制转化成十六进制

转义字符的ASCII码

17.switch case 语句中,如果不加break,以符合要求的一项为开始向下运行到结束。

其中如果default也在后面,则执行,如果不在后面,在符合要求的一项前面,则不执行。

18.printf的返回值是打印字符的个数。%d算一个,直接打印的字母算一个,汉字算两个。

Scanf的返回值是读取了几个数值(几个%d被使用了,返回几),读取失败返回EOF.

19.数组名做函数实参不能加[ ],

数组名做函数形参必须加[ ].

20.求两个数最大公约数,辗转相除法

即24、18

24%18=6

18%6=0  则6是最大公约数

21.局部变量不初始化,是随机值。//栈区

全局变量不初始化,默认是零。//静态区

静态变量默认也是零。

22.%p以16进制打印地址

23.二维数组列不能省略

24.数组名就是数组首元素地址

有两个例外

  1. sizeof(数组名),数组名不是数组首元素的地址,数组名表示整个数组。
  2. &数组名,数组名不是数组首元素的地址,数组名表示整个数组,取出的是整个数组的地址。

25.对于二维数组a[3][3]

sizeof(a)=9  sizeof(a[0])=3

strlen(a)一直找到\0,strlen(a[1])从a[1]开始一直找到\0

26.rand()%100+1 生成1~100之间的随机数或者理解成%100后一定0-99然后加1

其中的rand()%(n-m+1)+m算是一个公式(上限-下限+1)+下限

比如产生10~30的随机整数:srand(time(0));

int a = rand() % (21) + 10;

27.初始化二维数组时,如arr[3][4]

如果想第二行全为零,

不可{{1},{},{4,6,9,10}}//即第二行空着

此不合法。

应该{{1},{0},{4,6,9,10}}//给个零

28.负数的原码,反码,补码转换

即补码取反后加一也可以得到原码

(补码的补码就是原码)

29.右移操作符

30.按位与 按位或 按位异或

都是以二进制补码形式操作

其中a^a=0  0^a=a

异或操作符只能作用于整数

31.sizeof()括号内的表达式是不参与运算的

如a=3

Sizeof(a=a+3)

结果还是a=3

原因是编译期间就处理了sizeof,

不会在运行时执行a=a+3了

32.scanf()读取失败的时候,返回EOF

EOF实际上是-1

而While(~scanf(“%d”,&n))之所以可以终止循环,是因为返回的EOFà-1二进制取反=0

33.下边引用操作符[ ]

arr[4]<=>*(arr+4)<=>*(4+arr)<=>4[arr]

[ ]是操作符

34.整型提升

当运算类型为整型,且字节数小于int型时,运算时会先转换为int型或unsigned int,然后才能送入CPU运算。

通用CPU操作数字节长度一般是int的字节长度

35. 全局变量,没有给初始值时,编译其会默认将其初始化为0。

36.sizeof()的返回值是无符号整型

37.

Visual studio编译器,先执行全部a++或++i,然后再相加

38.指针类型作用

(1)指针类型(int* char*等)决定了在解引用指针变量时,访问的权限,即所操作的字节大小

如int* 可操作四个字节,

char* 只能操作一个字节

(2)指针类型决定了指针向前或向后走一步,走多大距离

对指针操作时

即int*p;p+1向后四个字节 +1—>+1*sizeof(int)à+4

Char*p;p+1 向后一个字节+1—>+1*sizeof(char)à+1

39.指针-指针

得到的是指针之间元素的个数

或负个数

40.二级指针

41.指针数组

存放指针的数组

42.调试时F5(调试)和F9(设置断点)一般配合使用

43.形参数组中[ ]的值不需要设置,即使设置了,也没用,不会在函数中创建数组,

还是按传递过来的数组名是首地址进行操作。

44.栈地址的使用是由高地址向低地址使用的。

45.十六进制 两位 占一个字节

即一个int型数据如10

00000000 00000000 00000000 00001010

用00 00 00 0a即可表示

46.

小端字节序存储,

把一个数据的低位字节处的数据存放在低地址处,

把高位字节处的数据存放在高地址处

大端字节序存储,

把一个数据的低位字节处的数据存放在高地址处,

把高位字节处的数据存放在低地址处

Visual Studio采用的小端字节序存储

如存取数字10,

转化为16进制为00 00 00 0a

在内存中存储

0x008FFBA4  0a

0x008FFBA5  00

0x008FFBA6  00

0x008FFBA7  00

47.数组

小下标在低地址,大下标在高地址

即数组随着下标的增长,地址是由低到高变化的

48.const

Const int a=10;

不能对a进行赋值操作

但是*(&a)可以修改a的值

Const在*左边

如Const int* p=&num;或int const*p=&num;

Const修饰的是*p,p指向的对象不能通过*p改变,但可以改变p中的地址

Const在*右边

如Int* const p=&num;

Const修饰的是p,不可以改变p中的地址,但p指向的对象的值能通过*p改变

49.输出八进制%o,输出16进制%x,

可以用%#o控制输出0的前导0

可以用%#x控制输出0x的前导0x

%X(大写的X)可以控制输出的16进制字母为大写的

50. 浮点数比较大小

不可以float f=0.000001

然后if(f==0.000001)//==不可用于浮点型。

因为0.000001没有在内存中精确存储

应该写成

float a = 0.000001f;

float b = 0.000001f;

//abs是绝对值

//1e-6是上下浮动数字

if (abs(a - b) <= 1e-6) {

printf("a 等于 b\n");

}

else {

printf("a 不等于 b\n");

}

51.字符指针的另一用法

指将字符串abcdef的a的地址给p

Ps:abcdef创建出来就被放在了常量区

字符串abcdef是常量字符串

为了保证不 改变常量abcdef而报错

可以在char前面加上const

如果出现两份常量字符串abcdef

如const char*p1=”abcdef”;

Const char*p2=”abcdef”;内存中,常量区只保存一份,即p1和p2所指向地址相同

52.二维数组中,如果列越界访问,可以访问到对应元素,因为二维数组在内存中是连续存放的

如int a[2][2] = { 1,2,3,4 };

printf("%d", a[0][2]);

将会输出3

53.数组指针

Int * p[10]叫指针数组

Int(*p)[10]叫数组指针

P是数组指针类型

即int(*)[10]

//[10]表示p指向的数组有多大,int表示p指向的数组元素是什么类型

练习

54.二维数组中

数组名表示的是第一行的地址

类型是

如int a[3][5]

其中a的类型为int(*p)[5]

55.isalpha()          //<ctype.h>

判断括号内是否为字母

如果是,返回一个非0的值

如果不是,返回0

56.scanf运用%m格式控制,可以控制输入的域宽。

如输入20040328

可以通过scanf(“%4d%2d%2d”)依次将2004 03 28截取下来

57.printf运用%0格式控制,可以用0来填充不足域宽的部分

如Printf(“%02d”,3);

将输出03

58.sizeof的返回值是无符号整型

59.当不同类型进行运算时,要进行算术转换,算术转换是向上,向高字节转换的。

其中,如果整型和无符号整型进行运算时,整型转换成无符号整型

如int a=-1;

If(-1>sizeof(a))

Printf(“hehe”);

就结果来看,是会输出hehe的

因为sizeof返回值为无符号整型,

-1进行算术转换

补码11111111 11111111 11111111 11111111

看成无符号整型

60.n=n&(n-1)的妙用

//每次运算使n的二进制形式末尾少一个1

(1)求一个整数以二进制存储有多少个1

(2)求一个整数是不是2的幂次方

//看看二进制是否只有一个1

61. 
//int arr[5];

//arr是一个整形数组,每个元素是int类型的,有5个元素

//int* parr1[10];

//parr1是一个数组,数组10个元素,每个元素的类型是int*

//int(*parr2)[10];

//parr2是一个指向数组的指针,指向的数组有10个元素,每个元素的类型是int

//int(* parr3[10])[5];

//parr3 是一个数组,数组有10个元素,每个元素的类型是:int(*)[5]

//parr3是存放数组指针的数组

62.c语言中不能&(&a)

因为&的操作数必须是

一元&运算符的操作数应该是函数指示符,[]或一元*运算符的结果,或者是一个左值(变量)

63.函数指针

//int(*p)(int, int) = &Add;

int(*p)(int, int) = Add;//Add和&Add都代表Add函数地址

int ret = (*p)(2, 3);//(*p)就是Add

//int ret = p(2, 3);//p就是&Add

//int ret = Add(2, 3);

//int ret = ( * Add)(2, 3);//由于Add是地址,(*Add)就是Add

//int ret = (&Add)(2, 3);

printf("%d", ret);

64.函数声明可以不写形参,只写形参类型

65. 回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一 个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

66.void*类型的指针可以接收任意类型的指针而不报错(垃圾桶)

但不能对void*类型的指针进行

解引用 和 加1操作

使用之前要进行强制类型转换

67.sizeof(1)结果为4,即整型1的大小

Int a[10];

Sizeof(a+0)结果为4或8,即数组a首地址大小

Strlen

比较strlen和sizeof

68.二维数组

如a[3][4]

可以理解成三个一维数组组成的二维数组

一维数组名分别是a[0],a[1],a[2]

Ps:sizeof()括号中实际上是检测类型

如int a;

Sizeof(a)等价于sizeof(int)

上图最后一个

Sizeof(a[3])等价于sizeof(int[4]),虽然越界了,但实际上sizeof没有直接访问

69.

Ps:%p是以地址形式打印,不是去找地址,

所以给一个整型数,就以地址形式打印他

同时%p会在32位机器上打印4字节内容

64位打印8字节内容,不够位数补零

Ps:%x以16进制打印,不补零

70.

71.二维数组可以用二级指针方式解引用

如a[3][5]

a第一行的地址

*a第一行第一列的地址,相当于a[0]及第一行数组名

**a通过*a第一行第一列地址,找到首元素

72.pow()求幂函数

返回值是double类型的

73.字符数组没有完全初始化,未初始化部分默认为\0

74.strlen的返回值是无符号整型size_t

75.strcpy的返回值是目标空间的起始地址

76.strcat的返回值是目标空间的起始地址

77.数组指针解引用,相当于数组名,即首元素地址

78.strncpy如果源字符串长度小于给定num,拷贝完源字符串后,在目标字符串追加\0,直到达到num

79.strncat如果源字符串长度小于给定num,

只会拷贝完源字符串。

.strncat拷贝完num长度的源字符串后,会在目标字符串后面追加一个\0

80.strncmp中num表示比较前几个字符

81.strstr找子串

char * strstr ( const char *str1,

const char *str2 );

在str1中找str2,返回str1中第一次出现str2的地址

(持续更新中2023.5.24)

C语言学习中遇到的小知识点相关推荐

  1. 学习中遇到的小技巧(陆续更新……)

    原来只是在网易博客里整理了一些学习中遇到的小技巧,现在开始在这里慢慢积累希望对大家有所帮助. 1.浏览器技巧: 如果浏览器的缓存已满,服务速度可能会减慢,您可能无法下载和查看附件.一下是在Intern ...

  2. c语言错误的等式,C语言学习中几个常见典型错误分析.docx

    C语言学习中几个常见典型错误分析 打开文本图片集 摘要:C语言是一门优秀,应用广泛的结构化程序设计语言,是中职计算机.机电和电子技术等专业一门理论和实践相结合的课程,教学实践中,学生常觉得c语言难学, ...

  3. python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略

    python语言学习:python语言学习中的定义类.定义函数.封装api等详细攻略 目录 python语言学习中的定义类 python语言学习中的定义函数 python语言学习中封装api pyth ...

  4. MFC学习中遇到的小问题和解决方案

    MFC学习中遇到的小问题和解决方案 1 清除combox里面的内容 ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有 ...

  5. c语言补码计算方法,探讨C语言学习中补码计算方法.doc

    探讨C语言学习中补码计算方法 探讨C语言学习中补码计算方法 摘要:补码是C语言学习中的一个重点和难点,如何能够快速准确地计算出各个数的补码值得我们探讨.本文从补码的意义入手,采用逆向逻辑思维,分别提出 ...

  6. Android开发中的一些小知识点记录(101-120)

    编写不易,如有转载,请声明出处:http://blog.csdn.net/zxc514257857/article/details/118554522 Android开发中的一些小知识点记录(1-20 ...

  7. c语言初学知识点,C语言学习关于数据类型的一些知识点(初学者)

    1.整型常量的的前缀:(1)十进制常数无前缀. (2)八进制常数前缀为0,八进制常数无符号. (3)十六进制常数前缀为0X或0x. 注:在程序中是根据前缀来区分各种进制数的.因此在书写常数时不要把前缀 ...

  8. python中的一些小知识点

    本篇博客将会讲述python中存在的一些小知识点. 一.小知识点 1.for-else结构(即for和else不同级)如图: 知识:当迭代的对象迭代完并为空时,位于else的子句将执行,而如果在for ...

  9. python基础学习中要懂的知识点:反射机制

    反射是什么 反射指在程序运行过程中可以动态获取对象的信息. 是通过字符串的形式 ,导入模块:通过字符串的形式,去模块 寻找指定函数 ,并执行.利用字符串的形式去对象中操作成员,一种 基于字符串的驱动 ...

最新文章

  1. html5 Canvas画图4:填充和渐变
  2. [转]高效编程之欲擒故纵
  3. 尚学python课程---11、linux环境下安装python注意
  4. [实践系列]Promises/A+规范
  5. STM32 应用程序加密的一种设计方案
  6. gitlab 本地 定时备份
  7. 卧槽:这款 SQL自动检查神器,吊炸天的功能,真TMD多!!
  8. 设置文本输入框光标位置,兼容ie,w3c
  9. 我的csdn账号开通啦~
  10. HFS 2.3x 远程命令执行(抓鸡黑客末日)
  11. Ubuntu系统实现简单c语言编程
  12. bedtools subtract 基因区段取差集
  13. element手机验证格式_ElementUI验证手机号
  14. microsoft excel使用技巧和问题解决
  15. 微信小程序+轮播图+弹窗等设置
  16. iOS UILabel高度的极限值
  17. cc1101初始化c语言程序,STC89C52单片机驱动CC1101无线模块的发送C语言程序
  18. 有一对兔子,从出生后的第 3 个月起每个月都生一对兔子。小兔子长到第 3 个月后每个月又生一对兔子,假设所有的兔子都不死,问 20 个月内每个月的兔子总数为多少?
  19. localbus总线
  20. 基于STM32开发的CO2浓度、温湿度、气压监测系统

热门文章

  1. 【码蚁君】AR实战-圣诞礼物EasyAR+Unity
  2. 服务器断电后自动重启
  3. 动物医学和计算机专业哪个好,本科动物医学专业排名,2020选择哪所大学好?
  4. 1月第1周全球域名总量TOP20:中国亚军 涨幅缩小
  5. 清晨第一泡尿的疾病信息
  6. 《DevOps实践指南》笔记:第3章
  7. 大商创php,大商创平台后台简介
  8. NN and the Optical Illusion(数学)
  9. 总结一下/boot分区被删后的各种悲剧
  10. Mina中的stake delegation