c++基础知识

1.定义数组时,元素从低地址向高地址存储,如整型数组,相邻元素地址相差4个字节。

可以看到相邻元素内存地址相差4个字节。

计算机存储器的内存以字节为基本单位,即一个地址代表一个字节(Byte)的存储空间。 TB,GB,MB,KB,B(Byte),bit,1Byte=8bit(位)。

2. const char * p, char const * p, char * const p:

const char* p:字符指针p指向的内容为常量,不可更改,不可通过指针p修改,但若指向内容有其它名称,可通过其它名称修改,故不是完全意义上的常量,只是针对p是常量;

char const * p:同上

char * const p:指针p为常量,不可修改,即p的内容(指向内存的地址)不可修改,但p指向的内容可修改。

3.字符数组末尾默认不会有结束符'\0',字符串末尾默认会有

4.查询变量类型

#include<typeinfo>

typeid(i).name();

5.char * ptr="hello"; 声明一个char类型指针,指向字符串“hello”,ptr存的是“hello”首字符地址,若直接cout<<ptr;则会输出“hello”,字符串支持这种输出,因为字符串存储在一块连续的内存空间中,且末尾有结束符,输出首地址则会自动输出整个字符串。

6.string类常用操作(初始化,遍历,连接)

str2-7之前已声明为string类型:

5.任何类型的指针在32位系统中占用字节数为4,64位系统中占用字节数为8,sizeof()可查看某对象的占用字节数。

6.c++内存管理:

c++中,内存分为:栈,堆,自由存储区,静态存储区,常量存储区。

栈:执行函数时,函数内的局部变量的存储单元在栈上创建,函数结束时自动被释放。

堆:由malloc分配的内存块,用free释放内存。

自由存储区:由new分配的内存块,用delete释放。

静态存储区:存放全局变量和静态变量。

常量存储区:存放常量,不允许修改。

7.为什么cout字符型指针输出的不是地址而是字符或字符串,因为c++标准库I/O类对<<操作符重载,在遇到字符型指针时会当作字符串名来处理,输出指针所指字符串。要想输出地址值,得让<<操作符不判断它是字符型指针,所以加个强制类型转换,用static_cast实现,将字符串指针转换为无类型指针即可。

8.字符串常量存在静态存储区,在内存中仅有一份拷贝。

发现a和b指向同一内存地址,即“hello”在内存中只有一份拷贝。

a,b是数组变量,在栈中分配了各自的内存空间,存储的值是“hello”,而“hello”依然存储在静态存储区内,输出的是栈中分配的a,b的地址,而不是“hello”的地址。

在函数中,若函数的返回值是一个局部变量的地址,该局部变量一定要声明为static类型,倘若不声明,函数调用结束时,局部变量地址回收,返回则是乱码。

9.类成员函数用const定义,表示该函数不能修改类对象数据成员,也不能调用非const成员函数;

10.类型转换:

static_cast<目标类型>标识符:静态类型转换;

dynamic_cast:父子类间的类型转换

const_cast:去const属性转换,目标类型只能是指针或引用;

reinterpret_cast:重新解释类型转换。

11.类的静态成员和非静态成员

静态成员在对象创建之前就已分配了内存空间,而非静态成员在对象创建时分配空间,对象撤销时释放空间,因此可以用类名直接调用静态成员,而不能调用非静态成员。

1.类中静态成员函数用static声明,可以用类直接调用静态成员函数,而非静态成员函数只能用类对象调用。

2.类对象可以调用静态成员函数和非静态成员函数。

3.静态成员函数不能引用非静态成员。

4.非静态成员函数可以使用静态成员,反之不能。

5.类的静态成员变量使用前必须先初始化。

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值