C/C++经典复习知识点 精华满满

以下内容为复习过程中整理的零碎内容!
结构体内容未分享

C语言

指针部分

C语言函数指针和回调函数

函数指针是指向函数的指针变量。
通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。
函数指针可以像一般函数一样,用于调用函数、传递参数。
函数指针变量的声明:
typedefint(*fun_ptr)(int,int); / 声明一个指向同样参数、返回值的函数指针类型

以下是摘抄自知乎作者常溪玲的解说:(我觉得很经典)

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。

实例

#include<stdlib.h>
#include<stdio.h>// 回调函数
void populate_array(int *array, size_tarraySize, int(*getNextValue)(void))
{
  for(size_ti=0; i<arraySize; i++)
  array[i] = getNextValue();
}// 获取随机值
int getNextRandomValue(void)
{
  returnrand();
}
int main(void)
{
  int myarray[10]; 
  populate_array(myarray, 10, getNextRandomValue); 
  for(int i = 0; i < 10; i++)
  {
    printf("%d ", myarray[i]); }
    printf("\n"); 
    return0;
  }
}

实例中 populate_array函数定义了三个参数,其中第三个参数是函数的指针,通过该函数来设置数组的值。
实例中我们定义了回调函数getNextRandomValue,它返回一个随机值,它作为一个函数指针传递给populate_array函数。
populate_array 将调用 10 次回调函数,并将回调函数的返回值赋值给数组。

六种操作字符串的函数

序号函数
1strcpy(s1, s2);复制字符串 s2 到字符串 s1。
2strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾。
3strlen(s1);返回字符串 s1 的长度。
4strcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1s2 则返回大于 0。
5strchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6strstr(s1, s2);返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

输入&输出

int scanf(const char *format, ...) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。
int printf(const char *format, ...) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。
format 可以是一个简单的常量字符串,但是您可以分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、字符或浮点数。还有许多其他可用的格式选项,可以根据需要使用。如需了解完整的细节,可以查看这些函数的参考手册。现在让我们通过下面这个简单的实例来加深理解:
2.
char *gets(char *s) 函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。
int puts(const char *s)函数把字符串 s 和一个尾随的换行符写入到 stdout。
3.
int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。
int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。

C++

goto语句

实例

#include
usingnamespace std;

int main ()
{
// 局部变量声明
	int a =10;
// do 循环执行
   LOOP:do
	{
		if( a ==15)
		{
		// 跳过迭代
          a = a +1;
		goto LOOP;
		}
		cout<<"a 的值:"<< a << endl;
       a = a +1;
	}while( a <20);

return0;
}

当上面的代码被编译和执行时,它会产生下列结果:
a 的值:10
a 的值:11
a 的值:12
a 的值:13
a 的值:14
a 的值:16
a 的值:17
a 的值:18
a 的值:19
goto 语句一个很好的作用是退出深嵌套例程。例如,请看下面的代码片段:
for(…){for(…){while(…){if(…)goto stop;…}}}stop:cout <<“Error in program.\n”;
消除 goto 会导致一些额外的测试被执行。一个简单的 break 语句在这里不会起到作用,因为它只会使程序退出最内层循环。

if循环第二种表示

if(y <10){var=30;}else{var=40;}

上面的代码可以写成以下语句:

var=(y <10)?30:40;

C++的函数组成

在 C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  1. 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
  2. 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  3. 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  4. 函数主体:函数主体包含一组定义函数执行任务的语句。

数学函数

序号函数 & 描述

  1. double cos(double);该函数返回弧度角(double 型)的余弦。
  2. double sin(double);该函数返回弧度角(double 型)的正弦。
  3. double tan(double);该函数返回弧度角(double 型)的正切。
  4. double log(double);该函数返回参数的自然对数。
  5. double pow(double, double);假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。
  6. double hypot(double, double);该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。
  7. double sqrt(double);该函数返回参数的平方根。
  8. int abs(int);该函数返回整数的绝对值。
  9. double fabs(double);该函数返回任意一个浮点数的绝对值。
  10. double floor(double);该函数返回一个小于或等于传入参数的最大整数。

随机数

在许多情况下,需要生成随机数。关于随机数生成器,有两个相关的函数。一个是rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。

下面是一个关于生成随机数的简单实例。实例中使用了 time() 函数来获取系统时间的秒数,通过调用 rand()函数来生成随机数:
实例

#include<iostream>
#include<ctime>
#include<cstdlib>
usingnamespace std; 
int main()
	{
	int i,j; // 设置种子
	srand((unsigned)time(NULL)); /* 生成 10 个随机数 */
	for(i = 0; i < 10; i++ )
	{
		// 生成实际的随机数
		j= rand(); 
		cout <<"随机数: " << j << endl; 
	}
	return0;
}

C++数组

C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。
如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:

int * myFunction(){...}

另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
现在,下面的函数,它会生成 10 个随机数,并使用数组来返回它们,具体如下:
实例

#include<iostream>
#include<cstdlib>
#include<ctime>
usingnamespace std; // 要生成和返回随机数的函数
int * getRandom()
{
	static int r[10]; // 设置种子
	srand((unsigned)time(NULL)); 
	for(inti = 0; i < 10; ++i)
	{
		r[i] = rand();
 		cout << r[i] << endl; 
	}
	return r;
}// 要调用上面定义函数的主函数
int main()
{// 一个指向整数的指针
	int *p; 
	p = getRandom(); 
	for(int i = 0; i < 10; i++ )
		{
		cout << "*(p + " << i << ") : "; 
		cout << *(p + i) << endl; 
	}
	return0;
}

字符串函数(同C语言)

  1. strcpy(s1, s2);复制字符串 s2 到字符串 s1。
  2. strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾。
  3. strlen(s1);返回字符串 s1 的长度。
  4. strcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1s2 则返回值大于 0。
  5. strchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
  6. strstr(s1, s2);返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

C++引用

When a variable is returned by reference, a reference to the variable is passed back to the caller. The caller can then use this reference to continue modifying the variable, which can be useful at times. Return by reference is also fast, which can be useful when returning structs and classes.
我的理解:一个变量被返回其引用的意思是,给了返回变量的一个别名,相当于每个人有自己的大名,同时还会有小名。

引用作为返回值,必须遵守以下规则:

(1) 不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一 个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常 量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

日期&时间

C/C++ 中关于日期和时间的重要函数。所有这些函数都是 C/C++ 标准库的组成部分。

序号函数
1time_t time(time_t *time);该函数返回系统的当前日历时间,自 1970 年 1 月 1 日以来经过的秒数。如果系统没有时间,则返回 .1。
2char *ctime(const time_t *time);该返回一个表示当地时间的字符串指针,字符串形式 day month year hours:minutes:seconds year\n\0。
3struct tm *localtime(const time_t *time);该函数返回一个指向表示本地时间的 tm 结构的指针。
4clock_t clock(void);该函数返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。如果时间不可用,则返回 .1。
5char * asctime ( const struct tm * time );该函数返回一个指向字符串的指针,字符串包含了 time 所指向结构中存储的信息,返回形式为:day month date hours:minutes:seconds year\n\0。
6struct tm *gmtime(const time_t *time);该函数返回一个指向 time 的指针,time 为 tm 结构,用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。
7time_t mktime(struct tm *time);该函数返回日历时间,相当于 time 所指向结构中存储的时间。
8double difftime ( time_t time2, time_t time1 );该函数返回 time1 和 time2 之间相差的秒数。
9size_t strftime();该函数可用于格式化日期和时间为指定的格式。

输入&输出

标准输出流(cout)
标准输入流(cin)
标准错误流(cerr)
标准日志流(clog)

以上内容多数参考菜鸟教程
大力推荐网站 https://www.runoob.com/

更多内容可以关注公众号ZY杂谈

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

San_jin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值