标题: C语言整形地址是十六进制;字符型地址不是十六进制? [打印本页]

作者: wrlsohu    时间: 2024-3-3 19:26
标题: C语言整形地址是十六进制;字符型地址不是十六进制?
#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
}

第一问题:内存中的字符型地址是什么?、第二问题:整形是四个字节,程序输出一个十六进制数,内存地址如何分配的?
作者: Hephaestus    时间: 2024-3-3 21:59
第一问题:所有类型地址都一样。第二问题:内存地址是OS分配的,不与其他应用程序发生冲突。
作者: wrlsohu    时间: 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,是吗?

作者: Hephaestus    时间: 2024-3-5 15:13
都是二进制存储的,是否显示十六进制是iomanip的内容,你没有包含。
作者: glinfei    时间: 2024-3-6 08:42
这个不是C的问题,而是计算机原理的问题。
作者: wrlsohu    时间: 2024-3-6 11:17
Hephaestus 发表于 2024-3-5 15:13
都是二进制存储的,是否显示十六进制是iomanip的内容,你没有包含。

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1