coloe_real 2023-03-07 18:13 采纳率: 0%
浏览 94

为什么c++ 中 指针数组 打印的不是地址而是字符串??

为什么c++ 中 指针数组 打印的不是地址而是字符串??

#include <iostream>

using namespace std;

int main(){
    char *str[3] = {"banana", "apple", "origin"};

    for(int i=0, i<3,++i) {
      cout << str[i] << endl;
    }

    return 0;
}
运行结果:
banana
apple
origin

所以为什么输出的是字符串呢,指针数组 str中的元素 不应该存放的是 地址嘛?
其实这个问题也可以转换为:为什么可以这样赋值 : char *str[3] = {"banana", "apple", "origin"};
关键是这样赋值之后还能输出?

补充一下,如果是一个 int类型的 指针数组 ,输出的结果我倒是能理解。

#include <iostream>

using namespace std;

int main(){

    int *ptr[3];

    int array_1[3] = {1, 8, 10};
    int array_2[2] = {12, 15};
    int array_3[4] = {11, 22, 33, 44};

    ptr[0] = array_1;
    ptr[1] = array_2;
    ptr[2] = array_3;

    for(int i=0, i<3,++i) {
      cout << ptr[i] << endl;
    }

    return 0;
}
运行结果:
0x61fda4
0x61fd9c
0x61fd80
  • 写回答

4条回答 默认 最新

  • 「已注销」 2023-03-07 18:16
    关注

    “Devil组”引证GPT后的撰写:

    • 在 C++ 中,字符串字面量被视为字符数组,由一个以空字符('\0')结尾的字符序列组成。在这个程序中,"banana"、"apple" 和 "origin" 都是字符串字面量,它们都是字符数组,其类型是 const char *,也就是指向字符数组的指针。
    • 在定义指针数组 char *str[3] 时,每个元素都是指向 char 类型的指针,也就是指向字符数组的指针。因此,在把字符串字面量分配给 str 数组元素时,实际上是把字符串字面量的地址赋给了指向字符数组的指针。这就是为什么输出的是字符串而不是地址的原因。
    • 在程序中,当使用 cout << str[i] 语句打印 str 数组元素时,它实际上是打印指向字符数组的指针所指向的字符串,而不是打印指针本身的地址。因为 C++ 对于 char * 类型的指针会默认把它作为一个以空字符结尾的字符串来处理,直到遇到空字符才停止打印输出。

    如果你想打印指针本身的地址,可以使用取地址符(&),例如 cout << &str[i]。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月7日
  • 修改了问题 3月7日
  • 修改了问题 3月7日
  • 修改了问题 3月7日
  • 展开全部

悬赏问题

  • ¥15 什么设备可以研究OFDM的60GHz毫米波信道模型
  • ¥15 不知道是该怎么引用多个函数片段
  • ¥15 爬取1-112页所有帖子的标题但是12页后要登录后才能 我使用selenium模拟登录 账号密码输入后 会报错 不知道怎么弄了
  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题