天天看点

c++数组的基础知识数组地址获取下标和指针

定义和初始化数组

int a[5];                //定义数组是基本形式
int a[]={1,2,3};        //可以在定义时,直接初始化
int a[5]={1,2,3}        //定义时初始化数组,如果指定了数组大小,那么提供初始化的元素的个数只可以比数组指定的个数少,本可以多,没有初始化的位置,会默认初始化,           

对于字符数组,我们要记住一定要留一个位置存放结束符‘\0’,而且数组是不允许拷贝赋值的。数组的元素应为对象,因此不存在引用的数组

理解复杂的数组声明

  1. 数组的指针或数组的引用
  2. 存放指针的数组,没有存放引用的数组。
#include<iostream>
using namespace std;
int main()
{
    int num[5] = { 1,2,3,4,5 };
    int(*num_pointer)[5] = &num;        // 数组的指针   
    /*
    num_pointer  ⇒ &num 表示一个数组的首地址, 步长为一个整个数组大小  
    *num_pointer => num  表示数组第一个元素地址, 步长为一个数组元素的大小。
    **/
    cout << "num的值:" << num<<endl;
    cout << "&num的值:"<<&num << endl;
    cout << num_pointer << "   " << *num_pointer << endl;
    cout << **num_pointer << "   " << *((*num_pointer) + 1) << endl;

    int (&num_quote)[5] = num;            //数组的引用
    cout << num_quote[0] << endl;

    char* str[2] = {"Hello", "world"};     // 存放指针的数组
    cout << str[0] << endl;
    system("pause");
    return 0;
}           

输出结果:

c++数组的基础知识数组地址获取下标和指针

指针和数组

使用数组的时候,编译器一般会把它转换成为指针。在一些情况下对数组的操作,其实就是对指针的操作。

int num[5] = { 1,2,3,4,5 };
auto num1 = num;             //num存放的是数组的第一个元素的地址,所以num1的类型是一个指针
cout << "num1的类型是:" << typeid(num1).name() << endl;           

输出结果:

c++数组的基础知识数组地址获取下标和指针

数组地址获取

  1. begin函数获取数组的首地址
  2. end函数获取数组尾元素的下一个地址

下标和指针

内置的下标运算符所用的索引值是有符号数, 这一点和vector 和 string 不一样。下标和指针关系如下:

a[i] == > *(a + i)           

继续阅读