鱼C论坛

 找回密码
 立即注册
查看: 1344|回复: 8

[已解决]一个数组指针的下标和一个一维数组的下标不一致,那这个指针还可以指向这个数组吗?

[复制链接]
发表于 2019-11-5 17:05:57 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 老坚果 于 2019-11-5 17:37 编辑

一个数组指针的下标和多维数组的下标不一致,那这个指针还可以指向这个数组吗?如果可以的话要怎么做?如果不行的话为什么不行?
最佳答案
2019-11-5 17:05:58
本帖最后由 bin554385863 于 2019-11-5 21:58 编辑
老坚果 发表于 2019-11-5 21:49
类型不统一指的是int char 这样的类型吗?还是说是 int long'int这样的类型啊?还有就是您说的
隐式转 ...


指针的类型不统一,编译器是不会为你隐式转换的
int a[1][2][3];--->指针类型为int***;
int b[2][3];--->指针类型为int**;
int *ptr;--->ptr是一个一维数组的指针
a是三维数组,b是二维数字,要用ptr指向它们,必须强制转换类型为(int *);

最佳答案

查看完整内容

指针的类型不统一,编译器是不会为你隐式转换的 int a[1][2][3];--->指针类型为int***; int b[2][3];--->指针类型为int**; int *ptr;--->ptr是一个一维数组的指针 a是三维数组,b是二维数字,要用ptr指向它们,必须强制转换类型为(int *);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-5 17:05:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-11-5 21:58 编辑
老坚果 发表于 2019-11-5 21:49
类型不统一指的是int char 这样的类型吗?还是说是 int long'int这样的类型啊?还有就是您说的
隐式转 ...


指针的类型不统一,编译器是不会为你隐式转换的
int a[1][2][3];--->指针类型为int***;
int b[2][3];--->指针类型为int**;
int *ptr;--->ptr是一个一维数组的指针
a是三维数组,b是二维数字,要用ptr指向它们,必须强制转换类型为(int *);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-5 18:13:57 | 显示全部楼层
你问的问题就不成立,
你先弄清楚,指针有了下标代表 什么?
指针没有指向数组,你凭什么用指针和下标去访问数组元素?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-5 18:42:17 | 显示全部楼层
本帖最后由 秃子舰长 于 2019-11-5 18:45 编辑

我不太懂你的意思,我只知道指针数组这个东西,不知道还有数组指针。
指针数组是有一堆指针组成的一个数组,指针数组的每个元素都是一个指针,至于是什么类型的指针,那要看你怎么定义的了。
如果你说的数组指针是指向数组的一个指针的话,那它的下标与能不能指向对象没啥关系,它的下标仅仅只是它在指针数组里的位置而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-5 21:15:22 | 显示全部楼层
bin554385863 发表于 2019-11-5 18:13
你问的问题就不成立,
你先弄清楚,指针有了下标代表 什么?
指针没有指向数组,你凭什么用指针和下标去访问 ...

我知道啊 指针的下标相当于这个指针没变化一次的跨度 应该是这样没错 我的意思是像这样
<(*p)[5]>
的数组指针,是不是可以指向
<array[20][10]>
或者
<array[30][20][10]>
这样的数组?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-5 21:28:59 | 显示全部楼层
老坚果 发表于 2019-11-5 21:15
我知道啊 指针的下标相当于这个指针没变化一次的跨度 应该是这样没错 我的意思是像这样

的数组指针, ...

动手写下代码不就知道行不行了
int main(int argc, char const *argv[])
{
    int arr[3][3] = {{0}, {0}, {0}};
    int arr1[3][3][3] = {{{0}, {0}, {0}}, {{0}, {0}, {0}}, {{0}, {0}, {0}}};
    int *ptr = (int *)&arr;
    for (size_t i = 0; i < 9; i++)
    {
        std::cout << ptr[i] << " ";
    }
    std::cout << std::endl;
    int *ptr1 = (int *)&arr1;
    for (size_t i = 0; i < 27; i++)
    {
        std::cout << ptr1[i] << " ";
    }
    return 0;
}
------------------------------------------------------------------
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

PS E:\Users\admin\Documents\VScode> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-ciemrptt.dcy' '--stdout=Microsoft-MIEngine-Out-nazbil4p.axr' '--stderr=Microsoft-MIEngine-Error-be3vs5wi.dpx' '--pid=Microsoft-MIEngine-Pid-jah0530g.dsj' '--dbgExe=D:\MinGW\bin\gdb.exe' '--interpreter=mi'
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

PS E:\Users\admin\Documents\VScode>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-5 21:38:04 | 显示全部楼层
bin554385863 发表于 2019-11-5 21:28
动手写下代码不就知道行不行了

------------------------------------------------------------------ ...

我有试过写 但是报错说指针不兼容 而您写的代码我可能还没学到或者是别的什么的原因 我有些看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-5 21:45:10 | 显示全部楼层
老坚果 发表于 2019-11-5 21:38
我有试过写 但是报错说指针不兼容 而您写的代码我可能还没学到或者是别的什么的原因 我有些看不懂


不兼容是因为类型不统一;
通常情况下编译器会隐式转换类型,但是这种情况需要强制转换类型,至于怎么转换,等你学到了就会了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-5 21:49:33 | 显示全部楼层
bin554385863 发表于 2019-11-5 21:45
不兼容是因为类型不统一;
通常情况下编译器会隐式转换类型,但是这种情况需要强制转换类型,至于怎么转 ...

类型不统一指的是int char 这样的类型吗?还是说是 int long'int这样的类型啊?还有就是您说的
隐式转换类型是指的同类型之间长度的转换是无所谓的吗?还是说别的什么啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表