数组与指针

数组

      定义:在程序设计中,若把具有相同类型的若干变量按有序的形式组织起来,则这些按序排列的同类数据元素的集合称为数组。按数组元素的类型不同,又可分为:数值数组,字符数组,指针数组和结构数据等。

指针

      作用C++拥有在运行时获得变量或对象的地址和通过地址操作数据的能力,而这种能力是通过指针来发挥的。

      定义:用来存储 数据地址 的特殊变量,它本身也是一种类型。(注:指针变量在不致引起混淆的情况下也称指针)。

指针与数组

例:int* p; int a[10];

      联系:如上例可以进行p=a;p=&a[0];对指针变量p初始化,使p指向数组的首个元素,从而a[i]*(p+i)等价。即:数组名相当于一个指针,表示(存储)数组的首址。

      区别:指针是变量,可以进行数值运算.p++;而数组名是常量.a++,则错误。

指针数组与数组指针

      区别

              指针数组:数组元素均为指针的数组,本质是数组。

              例,int* ptrArr[10]; //即数组元素ptrArr[0],ptrArr[1],ptrArr[2]等均为指针。

              数组指针:指向数组首元素地址的指针----即指向数组的指针,本质是指针。

              例, int(*arrPtr)[10]; //arrPtr为一个int(*)[10]型的指针,指向一个大小10元素int型的数组。

下面通过一段程序来说明:

#include<iostream>
usingnamespace std;
int main()
{
        char str1[4]={'1','2','3','\0'};
        cout<<"str1类型:     "<<typeid(str1).name()<<endl;
        cout<<"&str1类型:    "<<typeid(&str1).name()<<endl;
 
        char str2[2][4]={
               {'1','2','3','\0'}
               ,{'4','5','6','\0'}
        };
        cout<<"str2类型:     "<<typeid(str2).name()<<endl;
        cout<<"str2:          "<<str2<<endl; //第一个一维数组的首地址
        cout<<"str2+1:        "<<str2+1<<endl;
 
    cout<<"&str2类型      "<<typeid(&str2).name()<<endl;
        cout<<"&str2           "<<&str2<<endl;//整个二维数组的首地址
        cout<<"&str2+1         "<<&str2+1<<endl;
    cout<<"&str2[0]类型:  "<<typeid(&str2[0]).name()<<endl;
        cout<<"&str2[0]        "<<&str2[0]<<endl;
        cout<<"&str2[0]+1      "<<&str2[0]+1<<endl;
 
    cout<<"&str2[0][0]类型"<<typeid(&str2[0][0]).name()<<endl;
        cout<<"&str2[0][0]     "<<&str2[0][0]<<endl;
        cout<<"&str2[0][0]+1   "<<&str2[0][0]+1<<endl;
 
        return 0;
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值