это 12.352 2024-07-18 11:47 采纳率: 50%
浏览 1

数组指针赋值输出的问题

#include<iostream>
using namespace std;
int main(){
    int a[10];
    int *p=&a[2];
    cout<<a<<endl<<p<<endl; 
    for(int i =0;i<=9;i++){
        cin>>*(p+i);
    }
    for(int i =0;i<=9;i++){
        cout<<*(p+i)<<" "<<(p+i)<<endl;
    }
    cout<<a[0]<<" "<<a[1];
    //for(int i =0;i<=9;i++){
    //    cout<<a[i]<<" "<<&a[i]<<endl;
    //}

}

我打算用指针从a[2]开始遍历赋值,然后看看没有赋值的a[0]和a[1]是不是默认值
结果如果我单输出a0会返回一个比较大的数,而a1依然是默认值0
然后我试着遍历a,结果连第二个for遍历p的输出都失灵了没有输出,注释掉就又可以输出

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-07-18 11:47
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    你的代码中存在几个问题,我将逐一解释并提供解决方案。

    1. 数组指针赋值问题

    你的目标是通过指针从数组的第三个元素(即a[2])开始遍历并赋值。你的代码中已经正确地初始化了指针p指向a[2],但是循环的边界条件需要调整。

    2. 未赋值元素默认值问题

    在C++中,局部变量的默认值是未定义的(即它们可能包含任何值)。因此,a[0]a[1]在未赋值之前可能包含任何值。你的代码中尝试输出这些值是正确的,但需要确保它们在赋值之前没有被意外修改。

    3. 输出问题

    你的代码中存在一些问题,导致输出不正确。以下是修正后的代码:

    #include<iostream>
    using namespace std;
    
    int main(){
        int a[10];
        int *p = &a[2];
        cout << "Array address: " << &a[0] << endl;
        cout << "Pointer address: " << p << endl;
    
        for(int i = 0; i < 8; i++){
            cin >> *(p + i);
        }
    
        for(int i = 0; i < 8; i++){
            cout << *(p + i) << " " << (p + i) << endl;
        }
    
        cout << "a[0]: " << a[0] << " a[1]: " << a[1] << endl;
    
        return 0;
    }
    

    解释

    1. 数组指针赋值

      • 初始化指针p指向a[2]
      • 使用for循环从a[2]开始赋值,循环次数为8(从a[2]a[9])。
    2. 验证未赋值元素

      • 在赋值循环之前,输出a[0]a[1]的值。
    3. 输出问题

      • 输出数组的前两个元素时,使用cout << a[0] << " " << a[1] << endl;
      • 输出指针指向的元素时,使用cout << *(p + i) << " " << (p + i) << endl;

    注意事项

    • 确保在赋值之前不要访问未初始化的数组元素。
    • 使用调试工具(如gdb)可以帮助你跟踪指针和数组的值。

    通过这些修正,你的代码应该能够正确地从a[2]开始赋值,并正确地输出未赋值的a[0]a[1]。同时,输出指针指向的元素也不会出现问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月18日

悬赏问题

  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 github录制项目
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 安装CentOS6时卡住
  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小