标签:struct pre 指针 amp 地方 c++学习 定义 数组指针 空指针
数组
初始化规则
int cards[4] = {1, 2, 3, 4}; //okay
int hand[4]; // okay
hand[4] = {1, 2, 3, 4} // not allowed
hand = cards; // not allowed, 不允许静态数组相互赋值,必须单个单个赋值。可使用array取代
short things[500] = {1} // 只有第0个元素为1,其他都为0
字符串
sizeof和strlen
sizeof(a) //得出字节(byte)数
strlen // 返回字符数量,末尾的'\0'不计算在内
字符串拼接
如果字符串过长,可以使用两个“”进行字符串拼接
char str1[] == "AA""BB";
cout << sizeof(str1) <<endl; // 5
string类
#incluede <string>
string str1;
string str2 = "ss";
//string定义的字符串可以自动调整大小,可以动态变化,并且可以使用运算符拼接。
str1 = str2 + str1;
结构体
//声明
struct inflatable
{
char name;
} in, *p;
//访问
in.name;
p->name;
(*p).name;
NOTE
共用体
union id
{
int i;
double g;
}
//匿名共用体
struct te
{
int name;
union
{
int i;
double g;
}
} tei;
// 访问
tei.i = 1;
//普通共用体
struct te
{
int name;
union id
{
int i;
double g;
}
} tei;
// 访问
tei.id.i = 1;
enum 枚举
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet}
指针
// & 取地址运算符
// * 解除引用运算符
使用new 分配内存 / 使用delete释放内存
new/delete 操作的是堆(heap)空间
// 创建数据对象指针
int* p = new int;
delete p;
// 创建动态数组
int* p = new int[5];
delete [] p;
遵循的原则:
指针、数组和指针算术
在多数情况下,C++将数组名解释为数组的第一个元素的地址。因此可以直接使用地址[索引]访问数组。
NOTE
double wages[3] = {1.0, 2.0, 3.0};
double* pw = wages;
cout << sizeof(wages) << " = size of wages array" << endl;
cout << sizeof(pw) << " = size of pw pointer\n";
// 得到结果如下:
//24 = size of wages array
//8 = size of pw pointer
//对于char数组
const char* str1 = "here";
char str2[] = "here";
cout << strlen(str1) << endl;
cout << strlen(str2) << endl;
cout << sizeof(str1) << endl;
cout << sizeof(str2) << endl;
//结果
// 4
// 4
// 8
// 5
上面对数组名和数组指针使用sizeof时得到的值不同,因为对数组名使用sizeof得到的是数组的长度,对指针应用sizeof得到的指针的长度。所以在double类型指针的结果中,对wage应用sizeof就是24byte,对pw应用sizeof就是8byte;在char类型的指针测试结果中,strlen函数因为以‘\0’为结束,所以结果相同,而sizeof对str1的结果是因为const指针为8byte,C++中“here”为常量字符串,必须为const指针类型指向内存或用数组保存。
数组的替代品,vector和array都是数组,都可以按照数组的方式访问
vector模板类-动态数组的替代品, 使用堆存储
#include <vector>
using namespace std;
vector<int> vi; // create a zero-size array of int
vector<double> vd(n); // create an array of n doubles
array模板类- 静态数组的替代品, 使用栈存储
#include <array>
using namespace std;
array<int, 6> ai;
array<int, 3> ad = {1, 2, 3};
// 与普通数组用法相同
NOTE
无论数组、vector对象或者array对象,都可以使用标准数组表示法来访问各个元素,例如a[0]
array对象和数组存储在相同的内存区域-栈中,而vector对象存储在堆中
array对象与数组不同的地方在于,一个array对象可以直接复制给另一个array对象,而标准数组不允许,必须单个值拷贝。
array<int, 10> ar1;
array<int, 10> ar2={1,1,2};
ar1 = ar2; // allowed!
int a[10];
int b[10] = {1,1,2};
a = b; // not allowed;
stl的数组可以避免索引越界,但仅在使用a.at(-2)成员函数时才有效,效率对比a[-2]要低一些。
标签:struct pre 指针 amp 地方 c++学习 定义 数组指针 空指针
原文地址:https://www.cnblogs.com/konoleoda/p/12245940.html