存储位置和数据类型的表示形式
Storage Location and Representation of Data Type
我试图找出声明变量时基本数据类型的存储位置以及基本数据类型的二进制表示形式。 下面是一些从数组外部获取数据的代码。 与最后一行相关的输出因我声明数组 YoMammy[] 的方式而异;已签名或未签名。 我知道这是正常的,但我不知道基本数据类型存储在哪里。 此信息是否与指针一起存储? 我知道数组只是引用指针的另一种方式。
int main()
{
unsigned int YoMammy[2]={3,7};
cout<<YoMammy[0];
cout<<endl;
cout<<YoMammy[1];
cout<<endl;
cout<<YoMammy[2];
return 0;
}
访问数组范围之外的元素会导致未定义的行为。您可能会获得一些价值作为YoMammy[2]
,您可能会遇到分段错误,或者发生一些奇怪的事情。
啊,不,不我知道数组只是引用指针的另一种方式。
,不。在许多情况下,数组名称将转换为指向其第一个元素的指针。但数组不是指针。
此外,您可以将呼叫链接到 std::cout
,它使您的生活更轻松:
std::cout << YoMammy[0] << std::endl << YoMammy[1] << std::endl << YoMammy[2];
没有存储描述C++中简单数据类型的元数据。 您观察到有符号整数和无符号整数之间的某种关系只是巧合。
这就是未定义的行为。 它可能表现出一种模式,但尚未定义。 不要试图定义没有定义的行为。=)
逻辑意义上的数组是物理中的存储。这意味着它是一个位置,有几个街区。 int would = i=[9]
是名称的一个插槽。而阵列在同一位置有多个插槽array=[][][][][][][][]
问:变量存储在哪里?
您可以打印地址并亲自查看变量的位置。
std::cout<<"Location of YoMammy[0]: "<<&YoMammy[0]<<std::endl;
std::cout<<"Location of YoMammy[1]: "<<&YoMammy[1]<<std::endl;
由于您声明的那些是main()
函数的本地。它们存储在堆栈段中。
问:与最后一行相关的输出是不同的,这取决于我如何声明数组 YoMammy[];有符号或无符号
数组索引从 0
n-1
开始。 n
是数组的大小。
( YoMammy[2]
) 越界访问是未定义的行为。它可能导致分段错误,堆栈粉碎或只是打印一些垃圾值(每次运行程序时您都不能期望相同)等,
问:我知道数组只是引用指针的另一种方式。
不。数组不是指针。尽管数组名称衰减为指向数组第一个元素的指针。它也有例外。阅读此内容
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 由INT数据类型(低,高)结构表示的双数据类型
- 用于在C++中表示 JSON 的数据类型
- 存储位置和数据类型的表示形式
- 表示本机有符号和无符号整数大小的数据类型
- 为什么我们需要不同的数据类型来表示指针
- 如何减少用户数据类型表示法?(typedef?)
- C++并集表示数据内存与C标量变量类型
- c++数据类型及其表示方式
- 布尔数据类型vs整数数据类型来表示真值