吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 775|回复: 6
收起左侧

[求助] c++指针与数组取址问题求助

  [复制链接]
zohoChou 发表于 2022-9-23 16:25
直接上关键代码(完整代码见下方):


[C++] 纯文本查看 复制代码
std::cout << name << " at " << reinterpret_cast<int *>(name) << std::endl; //clangd纠错后的
std::cout << name << " at " << (&name) << std::endl;//自己写的 


疑问:
1.为什么直接强制类型转换后的name的地址和我使用&取址得出来的值不是一个?
2.为什么一定要转换为 int * 类型?
是不是我个人的理解有误?


我个人认为第一句的(int*)是强制转换类型(就是显示字符串数组原本的地址),而第二句我自己写的就是想强制取址看看地址,结果不对……

reinterpret_cast<int *>(name)这个能理解,必应的结果是显式强制类型转换
[C++] 纯文本查看 复制代码
#include <cstring>
#include <iostream>


char *get_name(void);
int main(void)
{
    char *name = NULL;
    name = get_name();//相当于数组名,本质指针。

std::cout << name << " at " << (int *) name << std::endl;  //原代码
    std::cout << name << " at " << reinterpret_cast<int *>(name) << std::endl;  //clangd自动纠错后的代码(疑问,为什么一定要转换为int*类型?)
    std::cout << name << " at " << (&name) << std::endl;  //我写的代码,原意是想直接打印指针值的。
    delete[] name;

    return 0;
}
char *get_name(void)
{
    char temp[80] = {0};
    std::cin >> temp;//字符串数组已完毕
    char *pn = new char[std::strlen(temp) + 1];//pn就相当于新的字符串数组名,同时也是指向字符串的指针
    std::strcpy(pn, temp);//将数据存入新的指针中(非原指针)
    return pn;//返回的是个指针(相当于数组名)
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

JuncoJet 发表于 2022-9-23 16:35
指针问题是C的问题,不要去用C++解释
指针本质只是存储的地址,32位程序是32位指针 64位程序是64位指针
int* char* 都是一样的,只是指向的目标操作时会不一样 int*++ 会4字节一操作, char*++ 只会一字节
不过你的代码习惯要加强啊,谁申请谁释放,不要在函数里申请了内存返回出去,容易内存泄漏
应该从外部调用者申请内存后,传给函数
JuncoJet 发表于 2022-9-23 16:37
&name 是这个指针所在的地址
name 是指针指向的地址
*name 是name指向地址的值
evea 发表于 2022-9-23 16:34
本帖最后由 evea 于 2022-9-23 16:39 编辑

第一个是字符串的地址
第二个是name的地址  
name的地址存放字符串的地址


zjkedy 发表于 2022-9-23 17:21
name 虽然是个空指针,但是也已经从栈空间分的一个地址。 &name就是这个指针所在门牌号
 楼主| zohoChou 发表于 2022-9-23 19:29
JuncoJet 发表于 2022-9-23 16:37
&name 是这个指针所在的地址
name 是指针指向的地址
*name 是name指向地址的值

感谢!!!明白了(笑哭)

感谢解答疑惑(顺便还指出了问题)!!!

另,这个是c primer plus 书上的原题(溜……
qq1186 发表于 2022-9-23 23:29
我记得学c++的时候,老师强调过,不要返回非静态变量的局部变量,你这里返回的pn...这里会不会有问题呀
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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