找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 360|回复: 5
收起左侧

C语言整形地址是十六进制;字符型地址不是十六进制?

[复制链接]
ID:28942 发表于 2024-3-3 19:26 | 显示全部楼层 |阅读模式
#include <iostream>
using namespace std;
int main(){
//char b = 'k';
int  b =5;
//char* p ;
int* p ;
p =&b;//
cout << "b = " << b << endl;  //输出K
cout << "&b = " << &b << endl;//输出K??
cout << "p = " << p << endl; //输出K??
cout << "*p=" << *p << endl; //输出K
}

第一问题:内存中的字符型地址是什么?、第二问题:整形是四个字节,程序输出一个十六进制数,内存地址如何分配的?
回复

使用道具 举报

ID:883242 发表于 2024-3-3 21:59 | 显示全部楼层
第一问题:所有类型地址都一样。第二问题:内存地址是OS分配的,不与其他应用程序发生冲突。
回复

使用道具 举报

ID:28942 发表于 2024-3-4 07:41 | 显示全部楼层
Hephaestus 发表于 2024-3-3 21:59
第一问题:所有类型地址都一样。第二问题:内存地址是OS分配的,不与其他应用程序发生冲突。

第一问题,若把字符型改为整形输出的地址是0×22fe34,是十六进制数,

#include <iostream>
using namespace std;
int main(){
int  b =5;
int* p ;
p =&b;//
cout << "b = " << b << endl;  //输出K
cout << "&b = " << &b << endl;//输出K??
cout << "p = " << p << endl; //输出K??
cout << "*p=" << *p << endl; //输出K
}
若改为字符型,就输出K??,不是十六进制数了呢?如上面程序输出还自带个问号。
第二问题,若改为整形后,应该占四个字节,地址也应该是四个地址,这里怎么只输出一个地址呢?难道是首地址?另外三个地址递增1,是吗?
回复

使用道具 举报

ID:883242 发表于 2024-3-5 15:13 | 显示全部楼层
都是二进制存储的,是否显示十六进制是iomanip的内容,你没有包含。
回复

使用道具 举报

ID:844772 发表于 2024-3-6 08:42 | 显示全部楼层
这个不是C的问题,而是计算机原理的问题。
回复

使用道具 举报

ID:28942 发表于 2024-3-6 11:17 | 显示全部楼层
Hephaestus 发表于 2024-3-5 15:13
都是二进制存储的,是否显示十六进制是iomanip的内容,你没有包含。

感谢回复,但是 加了   #include <iomanip>  还是没出现十六进制地址
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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