C/C++理论知识补充

预处理

比如

#include<iostream>

实际上就是将iostream文件中所有内容拷贝到这个文件中

operator实际上是种函数

比如

cout<<"hello world"<<"\n";

其实就是

cout.print("hello world").print("\n");

Header头文件相关

include指令实际上就是将另一个文件中的代码复制粘贴到当下文件中,如果出现同一文件被多次复制的情况,可能会导致重复而出错,解决方案

#pragma once

放置到.cpp文件头部,或者使用ifndef endif区域块

#ifndef _LOG_H
#define _LOG_H


//写相关代码操作



#endif

通过有无拓展名判断是C的库还是C++的库

C的库都有拓展名
C++没有

可以通过if语句判断指针是否为空指针

实际上没有else if

只是else和if两个连在一起写了而已,相当于else下添加了if语句

for循环语句格式理解

for(语句1;语句2;语句3){}

语句1是指:循环开始前进行的数据初始化
语句2是指:循环的判断条件
语句3是指:每次循环结束后进行的操作
所以for语句也可以有以下两种写法形式,作用相同

for(int i=0;i<5;i++){
cout<<"I love cta"<<endl;
}

//----------------------也可写成

int i=0;
for(;i<5;){
cout<<"I love cta"<<endl;
i++;
}

所以for后的括号中可以只有一个判断语句,甚至可以直接写成一个bool型变量,然后在满足一定条件后在循环中将其bool值改变
由此看出,实际上for和while循环实际上是相同的,只是写法不同

void pointer指针

意思是:我只需要一个存放地址的指针,现在并不在乎它指向的数据类型是什么

void* ptr=0;

注意:没有地址为0,所以上行代码等同于

void *ptr=NULL;

这其中的NULL实际上就是一个预处理的符号,它的预处理代码是:
#define NULL 0
#define NULL ((void*)0)

VS骚操作——看内存的方式

需要在设置断点进行运行后才能看内存(动一下脑子就知道不运行怎么会占内存)

断点运行下:Debug(调试)->Windows(窗口)->Memory(内存)->memory 1

可以看到当下运行状态中内存中的存储状态

++和* 操作符的优先级关系

因为++的优先级高,所以如果想通过指针并用++对数据进行修改,需要加上()

int a=8;
int* ptr=&a;
(*ptr)++;
cout<<*ptr<<endl;

如果不加那个括号,会发生ptr指向的地址+1,不再指向a的地址

地址作为形参的函数

用引用往往比指针看起来更nice

引用的注意事项

引用并不是一个变量,不单独占用内存
所以声明时必须进行初始化,而且一旦初始化就不能进行更改

函数写在类中

可以减少一个参数(类的对象的引用)

STRUCTS和CLASSES的区别

只有一个区别,struct默认成员是public,class默认成员是private
struct里面成员也可以是函数,其中的成员一样可以用private,protected,public关键字进行权限限定。
他也同样可以进行继承……
之所以C++中仍存在struct,是因为要保持和C语言的兼容性
但是通常情况下,如果涉及到继承,一般用class而不用struct

static关键字的作用

static关键字作用1:数据存放在静态变量区,如果当其存在于类中时,任意一个对象的修改,都会使这个类的所有对象的对应值都改变
static关键字作用2:在linking阶段,static后的变量或函数,只在当下编译单元中声明。
就是linker不会在当下编译单元外去寻找它的定义,linker也不能从其他编译单元中读取到这个对象
它对cpp文件的作用类似于private对于类的作用

extern关键字的作用

linker会在其他编译单元中去寻找当下声明的定义(外部链接)

进制前缀

二进制 0b
八进制 0
十六进制0x

循环语句直接加了分号

for语句和while语句不能直接跟;,不然会产生错误
例如

/*------------------例1--------------*/
int i=0;
while(i<1);
i++;
printf("%d",i);

/*------------------例2--------------*/
for(int i=0;i<1;i++);
printf("%d",i);

这两段语句,均因为多添加了;,导致无法正常运行
直接跟上一个分号相当于循环体中的语句为空。

toupper()函数和tolower()函数

返回值均为int型,直接输出不是字母

scanf函数的用法

float t;
int n;
scanf("%f%d",&t,&n);

sizeof(string)的问题

在不同编译器中值不同,但是同一编译器中不变
所以不能用sizeof获得字符串的长度

运算符重载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值