C语言专项训练

道阻且长,接下来就要开始数据结构的学习,而学不可以不练,在接下来的学习中,数据结构学习的同时,c语言训练也要开始更新了~

NO.1 函数

1.void函数声明

09b24792783848de8337212df87c94fb.jpg

 这道题一看就秒了(开玩笑)我们在知道答案的同时,也要明白其中的知识点(其实就是我的表达能力不好,想要向别人解释有点困难,所以借着复习来锻炼自己😝)

考点:函数声明 void

解析:void是这个函数返回的类型,这个类型就是没有类型的空类型,代表这个函数的返回值是空。

void也用于声明一些万能指针. 比如你要用一个指针,但是还不确定这个指针会指向什么类型的变量,那就申请一个void类型的指针,它就叫做万能指针,因为它可以指向任何类型的变量.

在c语言中,凡不加返回值类型限定的函数,都会被编译器作为返回整型值处理

NO.2 交换变量

64621ba7ae1e42e5895b2887ca374b94.jpg

失误

在实际编写代码时尽量不要用B,因为可能会出现溢出(即两个变量之和可能会超过变量类型能表示的最大范围)。

可以改为a^=b;b^=a;a^=b;不需要考虑溢出,a^=b,此时a记录了a和b两个数中二进制的异同情况,1表示不同,0表示相同。

操作符知识-CSDN博客

NO.3 指针

一.函数指针和指针函数

 dd4f8d6d4b8044969f5dd039790b8915.jpg

1.指针函数:当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,用于需要指针或者是地址的表达式中。是指带指针的函数,本质是函数

声明格式:类型说明符 *函数名(参数)

2.函数指针:指向函数的指针包含了函数的地址,可以通过它来调用函数。

声明格式:类型说明符 (*函数名)(参数)

拓展(复习):数组指针和指针数组

二.定值和定址

1f4a8b47fc26455f9475f279141d3155.jpg

const意思为"只读的",口诀:左定值,右定址(const在*的左边值不能变,在*的右边地址不能变)。

const int和int const的意思是一样的,也就是说,我们要从const* int和int*const中选择。

如果是const* int ptr,那么const限制的是*ptr,也就是地址,而ptr的值是可以改变的

如果是* const int ptr,那么const限制的是ptr,也就是值,而地址是可以改变的

如果是const int* const x,那么值和地址都被限制,不能改变。

注意:只要 在*之后有 const限定符,则该指针在声明时必须初始化 : 否则就是野指针

NO.4 分支和循环

一.if语句

9b9c515b353c448485e0d70d65ffb774.jpg

048a4ec49d4d4582bef7a3ab0d929349.jpg

 这道题本身很简单,而需要注意的是,对于for(;;)循环体,中间的表达式一般是个判定条件,返回布尔型。而for(表达式1;表达式2;表达式3)中,表达式2是判断,j=0这个表达式为0,因此判断条件为false,不会执行循环。

赋值语句的返回值是赋给的值

NO.5 操作符

dae5866aeb974d5bab1684d8470cce53.jpg

三目操作符从右到左计算

NO.6虚函数和纯虚函数

4a9ff0e411ab47edad37410695d1061a.jpg

纯虚函数是以=0为结尾的,并加上virtual关键字,且没有函数体的函数。

需要注意:

1、当类声明中包含纯虚函数时,则不能创建该类的对象

2、包含纯虚函数的类只用作基类

3、在类中使用=0指出类是一个抽象基类,在类中不可以定义该函数,只能声明

NO7.内存

22046f59de004a4f8556b77a12778310.jpg

NO8.数组

78ba637e1523485db56d393a2696bdda.jpg

NO.9 delete

bd1043c8a0b74552958416b6f6aec245.jpg

3b9fcbe8dac5466a954847a9b1850889.jpg

NO.10指针

 4661769c810f46879cc538bcb91150de.jpg

NO.11实型常数:

C语言语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数。如e3、5e3.6、.e、e等都是非法的指数形式。     E/e前面为十进制整数或实数,E/e后面为十进制整数且不能为实数,前后都不能省略

关键在于熟练掌握操作符的优先级和++的使用方法

写法一
y=*px+1; //y=(*px)++
此处*为间接访问,px指向地址的内容+1后的值赋给y。

此时,x=4,y=3。

写法二
y=*px++; //y=*(px++);
这里*(取值符)和++为同一优先级,px先和++结合;但会先使用px指向地址的内容并赋给y,之后px的值+1,只是改变了px指向的地址。

此时,x=3,y=3(这里大部分机器的结果 * px=3是因为系统给xy分配了相邻的地址,px+1指向的地址变成y的地址,如果xy的地址不相邻,则 * px的值不确定)。

两种写法 * px++和 * px+1的区别是后者是px指向地址的内容+1,前者是px指向的地址+1,所有后者、即单独的 * px++;等价于px++,是一种容易误解的写法,在实际程序中不会用到 * px++;这样的语句。

写法三(扩展)
y=*++px;
类似,px先和++结合;这次会先让px指向的地址+1,之后把px指向地址的内容赋给y,当然这个值是不确定的(一般系统给xy分配的地址是相邻的,所以px指向的地址一般就是y的地址,也就是说y的内容并为改变)。
此时,x=3,y= ?。

NO.12fscanf  sprintf  fgets  read  pread  write  pwrite  fseek  lseek


NO.13memcpy memmove


%d整型输出,%ld长整型输出,
   %o以八进制数形式输出整数,
   %x以十六进制数形式输出整数,
   %u以十进制数输出unsigned型数据(无符号数)。
  %c用来输出一个字符,
   %s用来输出一个字符串,
   %f用来输出实数,以小数形式输出,
   %e以指数形式输出实数,
%g根据大小自动选f格式或e格式,且不输出无意义的零。
其中%o和%x都是二进制的延伸,即八进制和十六进制,可以适用于unsigned变量输出


NO.14检测运算过程中整型溢出的方法

NO.15返回值

c c++中  返回值 只能有一个。   或者void ,没有返回值类型。
考虑到c++中的绑定器,类似可以返回多个值。结果不可以。
绑定器(Binder)是一种函数对象,它可以将一个或多个参数绑定到函数中的特定值,从而创建一个新的可调用对象
若想实现返回多个值的效果:使用struct  在函数体中,将要返回的多个值,赋到struct变量中,返回结构体变量。

NO.16标识符

标识符只能由字母(A~Z, a~z)、数字(0~9)和下划线(_)组成,并且第一个字符必须是字母或下划线。关键字不能定义为标识符


NO.17按位存储

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值