C++ 基础4:数组和指针

          本文主要讲述数组,各种类型的指针以及指针和数组的联系。

          1.数组

            (1) 数组的定义    只需要注意一点,定义数据时,必须明确指定数组的长度,这个长度不能是变量。如果在定义数组时就对数组进行初始化,可以不必指定数组长度,

                那么数组长度就是初始化元素的个数。

            (2) 数组的初始化

                数组为内置类型全局变量,自动初始化为0

                        为内置类型局部变量,必须显示初始化

                数组为类类型,无论是全局变量还是局部变量,都会自动调用类的默认构造函数初始化,若类无默认构造函数,则必须显示初始化。

            (3)字符数组

                "Hello"是个特殊的字符数组 等于 const char CArray[ ] = {'H','e','l','l','o','\0'}

             (4)数组不允许直接复制和赋值

            2.指针

             (1) 指针的定义

                   int*  p;  int  *p;    *号可以跟着int, 也可以跟着p.

             (2)指针的初始化

                  a. 0或Null

                  b. 和指针相同类型的变量地址

                  c. 另一个对象的地址的下一个地址

                  d.相同类型的另一个指针

              (3) 指向指针的指针   其值是另一个指针的地址 int *p = 0; int **q =&p;

              (4) 指向const对象的指针 

                    const int i = 0;

                    int* const p = &i;

                   p也可以指向非const变量,p本身的值可以改变,*p不能改变

              (5) const指针

                   指针本身的值不能改变,但是指针指向的变量值是否可以改变取决于变量本身是否是常量。

                   int i = 1;

                  int const  *p =&i;

              (6)指向const变量的const指针

                   本身的值不能改变,指向的值也不能改变。

                    const int const *p;

               (7) 指针的算术操作

                    连个指针相减得到ptriff_t类型的值

               (8)指针和引用的区别

                    引用在声明时就必须初始化;

                    引用一旦初始化,就永远和最初的变量相联系,改变引用的值,等于改变相关联变量的值; 而指针初始化以后可以再指向另外一个变量。

            3. 指针和数组的关系

               (1)一维数组名为数组第一个变量的地址,可赋值给一个指针

               (2)new, malloc可动态创建数组,new创建的数组在栈中,malloc创建的数组在自由区中

                    创建常量数组: const int* p = new const int[8](); 必须初始化

               (3)指针和二维数组

                   int a[3][4];

                   int (*p)[4]  = a;

                   p是一个指向有4个int元素数组的指针,*p为第一个元素的地址,*p中存放是一个Int 指针,**p是元素的值

                   p=&a[0]; p++=&a[1];

                   *p = &a[0][0]; *p++=&a[0][1]; **p = a[0][1];

 

                   int *p[4]; 表示为有4个int指针元素的数组

                   typedef string* ptr;

                  const ptr astring = string* const astring; 

                     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值