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

指向int数组的指针c

发布时间:2020-12-16 10:05:40 所属栏目:百科 来源:网络整理
导读:我编写了以下代码,试图了解如何使用指向数组和数组引用的指针.这是我对正在发生的事情的思考过程. arr与数组的第一个元素的地址相同. * arr告诉我该位置的int是什么,如arr [0]. p是一个指针并被赋予arr,这是第一个元素的地址.所以本质上* p与* arr相同,p [0]
我编写了以下代码,试图了解如何使用指向数组和数组引用的指针.这是我对正在发生的事情的思考过程.

> arr与数组的第一个元素的地址相同. * arr告诉我该位置的int是什么,如arr [0].
> p是一个指针并被赋予arr,这是第一个元素的地址.所以本质上* p与* arr相同,p [0]与arr [0]相同.
>在这里,我不明白发生了什么. arrPtr是一个指向十个整数数组的指针.为什么不* arrPtr或arrPtr [0]给我9值?
> arrRef是对十个整数数组的引用,与上面的点不同,* arrRef或arrRef [0]的值为9.

这是我的代码:

#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main() {
    int arr[10] = {9,18,31,40,42};
    cout << "arr: " << arr << endl;
    cout << "*arr: " << *arr << endl;
    cout << "arr[0]: " << arr[0] << endl;
    cout << endl;

    int *p = arr;
    cout << "p: " << p << endl;
    cout << "*p: " << *p << endl;
    cout << "p[0]: " << p[0] << endl;
    cout << endl;

    int (*arrPtr)[10] = &arr;
    cout << "arrPtr: " << arrPtr << endl;
    cout << "*arrPtr: " << *arrPtr << endl;
    cout << "arrPtr[0]: " << arrPtr[0] << endl;
    cout << endl;

    int (&arrRef)[10] = arr;
    cout << "arrRef: " << arrRef << endl;
    cout << "*arrRef: " << *arrRef << endl;
    cout << "arrRef[0]: " << arrRef[0] << endl;
}

这是我的输出:

arr: 0xbf843e28
*arr: 9
arr[0]: 9

p: 0xbf843e28
*p: 9
p[0]: 9

arrPtr: 0xbf843e28
*arrPtr: 0xbf843e28
arrPtr[0]: 0xbf843e28

arrRef: 0xbf843e28
*arrRef: 9
arrRef[0]: 9

解决方法

* arrPtr或arrPtr [0]产生一个int类型的对象[10]

在操作符中使用<<数组被显式转换为int *类型的指针和重载运算符<<对于这样的表达式,选择const void *的参数. 你可以看到这些输出

arr: 0xbf843e28

*arrPtr: 0xbf843e28
arrPtr[0]: 0xbf843e28

重合.

如果要输出数组的第一个元素,则应该编写

std::cout << **arrPtr << std::endl;
std::cout << ( *arrPtr )[0] << std::endl;
std::cout << arrPtr[0][0] << std::endl;
std::cout << *arrPtr[0] << std::endl;

为了更清楚,你可以引入一种参考方式

int ( &arrRef )[10] = *arrPtr;

然后写

std::cout << *arrRef << std::endl;
std::cout << arrRef[0] << std::endl;

(编辑:李大同)

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

    推荐文章
      热点阅读