【发布时间】:2021-08-01 16:11:26
【问题描述】:
我正在使用一个函数来适应一些 C++ 语法。 现在我想,我可能误解了:
我正在写入一个我定义为 myArray[0] 的静态 (?) 数组以进行实验。
所以它似乎不是静态的,但sizeof(myArray) 总是返回 0(?)
但我可以找到每个项目的内存地址(虽然我不知道如何以这种方式获取项目数量)。
还有一点我不明白,为什么我可以写myInt = myFloat?
那么,什么是静态数组?我应该更好地将<vector> 用于未定义长度的数组吗?
(你可以在这里找到完整的代码int2bin main.cpp)
#include <iostream>
//#include <regex>
int main()
{
while(true) {
//VARS
unsigned int arrBin[0], intNum; //working, if set [0]! NOT static???
unsigned int *pArr0 = &arrBin[0];
unsigned int *pArr1 = &arrBin[1];
std::cout << sizeof(arrBin) << '\n'; // 0 => sizeof() here items and not mem space?
std::cout << pArr0 << '\n';// 0x7fff12de6c38
std::cout << pArr1 << '\n';// 0x7fff12de6c3c
int i;
float refNum;
std::cout << "\n\nEnter a number to convert: ";
// GET INPUT
std::cin >> refNum; // float
intNum = refNum; // get int of the dec for comparing. Why does this "int = float" work???
【问题讨论】:
-
标准的doesn't permit 大小为零的数组,似乎
&arrBin[i]并没有按照您的想法执行。 -
hmmm,但大小为零在该在线编辑器和 VSCode 中都可以使用。奇怪......(我只是设置它,看看会发生什么,我会在哪里找到数据)你是什么意思 re &arrBin[i]? @Evg
-
有些编译器允许 ISO C++ 标准不允许的某些事情,这并不奇怪。这些称为特定于编译器的扩展。
-
C++ 有一个严格的类型系统。如果要将浮点数转换为整数,例如可以使用显式转换,例如
myInt = static_cast<int>(myFloat);。或者,您可以例如使用rounding functions 之一。其中一些将浮点数作为参数并返回整数,因此您无需执行强制转换。 -
永远不要以“是否有效”来判断事物。有些动作(如越界写入或读取)是非法的,但很难或不可能检测到。相反,它们会导致未定义的行为,即任何事情都可能发生。您的程序可能会崩溃、抛出异常或似乎可以工作。