Primer c++笔记 第四章 数组和指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fuck51cto/article/details/80395153
 Primer c++笔记 第四章 数组和指针

数组
数组是由类型名、标识符和维数组成的复合数据类型,类型名规定了存放在数组中的元素的类型,而维数则指定数组中包含的元素个数。

数组初始化

    //
    int ia[10] = {0};  
    int ib[10] = {0,1,2,3,4,5,6,7,8,9};
    size_t arr_size = sizeof(ib) / sizeof(int);
    
    for (size_t i = 0; i!=arr_size; ++i) {
        cout<<ib[i]<<endl;
    }


指针
指针是指向某种类型对象的复合数据类型,指针保存的是另一个对象的地址


指针的定义和初始化

 string *ps = NULL;
 char *s[100] = {NULL};
 int ival = 1024;
 int *pi = 0;
 int *pip2 = &ival;

对大多数的编译器来说,如果使用未初始化的指针,会将指针中存放的不确定值视为地址,然后操纵该内存地址中存放的位内容。
使用未初始化的指针相当于操纵这个不确定地址中存储的基础数据。因此,在对未初始化的指针进行解引用时,通常会导致程序崩溃。


void* 指针

C++ 提供了一种特殊的指针类型 void*,它可以保存任何类型对象的地址:

    double obj = 3.14;
    double *pd = &obj;
    void *pv = &obj;
    pv = pd;
    double *pda = (double*)pv;
    cout<<*pda<<endl;

指向指针的指针
指向一个指针变量


使用指针访问数组元素
 数组的名字,指向数组的第一个元素
     int ia[] = {0,1,2,3,4,5,6,7,8,9};
    cout<<*ia<<endl;  //ia[0]

指针的算术操作
指针加1,指向下一个元素
ip = ia;            // ok: ip points to ia[0]
int *ip2 = ip + 4;  // 在指针 ip 上加 4 得到一个新的指针,指向数组中 ip 当前指向的元素后的第 4 个元素。


遍历数组:
    int int_arr[] = {0,1,2,3,4,5,6,7,8,9};
    
    size_t arr_size = sizeof(int_arr) / sizeof(int);   // 计算数组元素个数

    
    for (int *pbegin = int_arr, *pend= int_arr+arr_size; pbegin!=pend; ++pbegin) {
        cout<<*pbegin<<endl;
    }



4. const 限定符

       添加了const 表示变量的值不能修改。

   const引用
       引用的对象必须是常量。
           const int ci = 1024;
    const int &r1 = ci;  
   底层const 指针
      指针 指向的变量必须是常量
        const int ci = 1024;
    const int *pi = &ci;

    顶层const 指针
        指针本身是一个常量,不能再指向其它变量。
    int ia, ib = 1024;
    int *const pi = &ia;
    pi = &ib;  // error

    双层const
       指针指向的变量必须是常量, 指针不能再指向其它变量。
       const int ia;

       const int *const pi = &ia;


	// 指向 const 对象的指针
	const double db = 512;
	const double db2 = 256;
	const double *pd = &db; // pd指向一个const double对象
	pd = &db2;   // 可以修改pd的地址

	// const 指针
	double *const pd1 = &db; // 指向double ,指针本身的值不能修改
	//pd1 = &db2;  错误  const 指针——本身的值不能修改

	// 指向 const 对象的 const 指针

	// 指向const double ,指针本身的值不能修改 
	const double *const pd2 = &db; 

C 风格字符串
        字符串以null结尾
    char ca1 = {'C','+','+'};
    char ca2[] = {'C','+','+','\0'};
    const char *cp = "C++";
    char *cp1 = ca1;
    char *cp2 = ca2;

创建动态数组

C 语言程序使用一对标准库函数 malloc 和 free 在自由存储区中分配存储空间,而 C++ 语言则使用 new 和 delete 表达式实现相同的功能。


多维数组
严格地说,C++ 中没有多维数组,通常所指的多维数组其实就是数组的数组:
如果数组的元素又是数组,则称为二维数组,其每一维对应一个下标:

     ia[2][3] // fetches last element from the array in the last row

多维数组的初始化
    int ia[3][4] = {
        {0,1,2,3},
        {4,5,6,7},
        {8,9,10,11}
    };
    int (*ip)[4] = ia;  // ip指向4个整型数组


二维数组
     二维数组由行和列组成,第一维数组保存的元素是,第二维元素的首地址
    
    int *ip[4];     // 整型指针的数组
    int (*ip)[4]    // 指向含有4个整数的数组


猜你喜欢

转载自blog.csdn.net/fuck51cto/article/details/80395153