数组

2019-07-25  本文已影响0人  k莫失莫忘

数组

1. 声明

typeName arrayName [arraySize]

2. 初始化

  1. 只有在定义数组时才能使用初始化
  2. 不能将一个数组赋给另一个数组
  3. 初始化数组时,提供的值可以少于数组的元素数目。编译器把其他元素设置为零。
int cards[4] = {1 , 2};
long totals[500] = {0}; //初始化totals中所有元素为0
  1. [] 内为空,编译器将计算元素个数
short things[] = {1, 5, 3, 6};
C++数组初始化新增规则
  1. 可以省略等号
int card[4] {1, 2, 3, 4};
  1. 可不在打括号内包含任何东西,这将把所有元素设置为零
  2. 列表初始化禁止缩窄转换
long plies[] = {25, 92, 3.0} // not allowed

3.指针和数组

指针

  1. 指针的声明
int* p1, p2 // 创建一个指针(p1)和一个int变量(p2)
  1. 指针的危险
    在C++中创建指针时,计算机将分配用来储存地址的内存,但不会分配用来储存指针所指向的数据的内存。
long *p;
*p = 233323; // place a value in never-never land

⚠️一定要在对指针解除引用(*p)之前,将指针初始化为一个指定的、适当的地址。

  1. 使用new来分配内存
typeName * pointer_name = new typeName;

new从堆(heap)或自由储存区(free store)中分配内存
C++中,值为0的指针被称为空指针(null pointer)

  1. 使用delete来释放内存
  • delete释放指针指向的内存,但不会删除指针本身
  • 不能用delete释放已释放的内存块
delete p;
delete p; // not ok
  • delete只能与new配对使用
int* p = &a;
delete p; // not allowed, memory not allocated by new
  • 对空指针使用delete是安全的
  • delete用于new分配的内存,但并不意味着要使用用于new的指针,而是用于new的地址。
int *p1 = new int;
int *p2 = ps;
delete pq; // ok
  1. 使用new创建动态数组
int *p = new int[10];
delete [] p;

数组名

在多数情况下,C++将数组名视为数组的第一个元素地址。
一种例外情况是,sizeof(数组名) 将返回整个数组的长度。

指针算术

指针变量+1后,增加的量等于它指向的类型的字节数。

数组表示法 & 指针表示法

C++ 在数组表示法时,会执行如下转换:
arrayname[i] ---> *(arrayname + i)
在使用指针时,也会执行如下转换:
pointername[i] ---> *(pointername + i)

例如:
*tacos[0] 表示 *tacos
*tacos[3] 表示 *(tacos +3)

上一篇 下一篇

猜你喜欢

热点阅读