C++ 指针再浅谈

C++ 指针再浅谈

指针概念

指针是一个变量,它存储的是内存里面的一个地址。



数组和指针

代码 1:

int mInt[2][2][3] =
{
   {
       {1, 2, 3},
       {4, 5, 6}
   },
   {
       {7, 8, 9},
       {10, 11, 12}
   }
};

for (int i = 0; i < 12; ++ i)
{
   cout << “按顺序输出数组中的内容” << " ";
}
cout << endl;

看到这个问题或许会想到用i 来判断数组的每一维的内容,当然这种方式也是可以的。不过还有另一种方式,通过数组和指针来解决。
上面的问题我们先放置一下,来看下数组和指针的关系,了解后面的介绍以后,上面的问题也会迎刃而解。

数组名是数组的首地址,同样也是数组第一个元素的内存地址。

代码 2:

int mInt[] = {1, 2, 3, 4, 5, 6, 7};

cout << mInt << endl;
cout << &mInt[0] << endl;

这里写图片描述

通过输出内容我们可以看到,上面的结论是正确的。
于是我么可以把代码 2的内容进行整理下,把数组的内容按照顺序输出。数组的定义:是把相同数据类型的数据放置在一起的一个集合, 他们在内存中是一个连续的。于是我们可以把数组的首地址按照一定的偏移量来获取到下一块内存中数据
代码 3:

int mInt[] = {1, 2, 3, 4, 5, 6, 7};

for (auto i = 0; i < sizeof(sizeof(mInt) / sizeof(int)); ++ i)
{
   cout << *(mInt + i) << " ";
}

cout << endl;

这里写图片描述
注意:在上面代码输出内容中,不能写成*mInt + i这样就是变成数组第一个值加上 i 的值作为输出内容了
使用一维数组我们用到指针,同样作用到二维数组也是可以的。
代码 4:

int mInt[][2] =
{
   {1, 2},
   {3, 4}
};

for (auto i = 0; i < 4; ++ i)
{
   cout << *(*mInt + i) << " ";
}
cout << endl;

这里写图片描述
在这段代码的输出中 *(*mInt + i)括号内的 *mInt指向的是mInt[0][0]的内存所在的地址。

看完这些例子,代码 1的问题也就有答案了,我们只需要获取到第三维数组元素的所在的内存地址按照偏移量,就可以输出数组中的元素了。

int mInt[2][2][3] =
    {
        {
            {1, 2, 3},
            {4, 5, 6}
        },
        {
            {7, 8, 9},
            {10, 11, 12}
        }
    };

    for (int i = 0; i < 12; ++ i)
    {
        cout << *(**mInt + i) << " ";
    }
    cout << endl;

这里写图片描述

数组指针 与 指针数组
数组指针

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值