加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 当访问ptr [i] [j]时,为什么int ** ptr指向与int arr [3] [

发布时间:2020-12-16 10:55:02 所属栏目:百科 来源:网络整理
导读:我正在回答这个 question,但是当我测试以下代码时 我很困惑. #include iostreamusing namespace std;int main(){ int **ptr; int arr[3][3]; ptr =(int **) arr; for (int i=0;i3;i++){ for (int j=0;j3;j++){ cout arr[i][j] " =? "; cout (ptr[i][j]) endl
我正在回答这个 question,但是当我测试以下代码时
我很困惑.

#include <iostream>

using namespace std;

int main()
{
        int **ptr;
        int arr[3][3];
        ptr =(int **) arr;
        for (int i=0;i<3;i++){
                for (int j=0;j<3;j++){
                        cout << &arr[i][j] << " =? ";
                        cout << &(ptr[i][j]) << endl;
                }

        }


        return 0;
}

但是我得到了这个输出:

0x7fff5700279c =? 0
0x7fff570027a0 =? 0x4
0x7fff570027a4 =? 0x8
0x7fff570027a8 =? 0
0x7fff570027ac =? 0x4
0x7fff570027b0 =? 0x8
0x7fff570027b4 =? 0
0x7fff570027b8 =? 0x4
0x7fff570027bc =? 0x8

他们为什么不一样?

解决方法

int ** ptr和int arr [3] [3]是不同的,因为:

-----------------------------------
|    C    |         Maths           |
 -----------------------------------
| ptr + 1 | ptr + sizeof(int*)      |
 -----------------------------------
| arr + 1 | arr + 3 * sizeof(int*)  |
 -----------------------------------

所以你根本得不到相同的结果(此外,ptr和arr可能没有相同的内存表示).

int (*ptr)[3] = arr;

将工作,因为只有arr的第一个维度衰减到指针.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读