C++ 写入 myArray[0] 并设置 myInt = myFloat,为什么这样工作?

C++ writing to myArray[0] and setting myInt = myFloat, why is this working?

我正在玩一个函数来习惯一些 C++ 语法。 现在想想,我可能理解错了:

我正在写入我定义为 myArray[0] 用于实验的静态 (?) 数组。

所以它似乎不是静态的,但 sizeof(myArray) 总是 returns 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??? 
unsigned int arrBin[0]

数组变量的大小不能为 0。程序格式错误。不要这样做。

unsigned int *pArr1 = &arrBin[1];

在这里,你使用了超出数组边界的下标运算符(超出最后一个元素),所以程序的行为是未定义的。不要这样做。

(while I have no idea, how to get the number of items this way).

项目数为 0(如果一开始就允许,则为 0)。

The other thing I don't understand, is why I can write myInt = myFloat?

你甚至还没有声明这样的标识符。

I'm writing to a static (?) array I had defined as myArray[0] for experimenting.

'static' 你可能是指 'fixed-sized'。 static 意味着完全不同的东西,参见 https://www.geeksforgeeks.org/static-keyword-cpp/

So it seems NOT to be static

不是static,因此,不是static也就不足为奇了。

but sizeof(myArray) always returns 0

它的大小是0,因为指定的大小是0。虽然这不受标准支持,但某些编译器可能允许它。

but I can find mem address for each item (while I have no idea, how to get the number of items this way).

&arr[i] 生成地址。

The other thing I don't understand, is why I can write myInt = myFloat?

整数总是实数,但实数并不总是整数。那么,如何将 0.5 存储为整数?你可以施放它,也可以将它舍入。

So, what IS a static array?

在我提供给您的 link 中,提到函数中的 static 变量是在整个程序运行期间为其分配内存的变量。因此,static 数组是使用 static 关键字声明的数组,在程序的整个生命周期内为其分配 space。您的函数中没有声明这样的数组。

And should I better use for an array of undefined length?

这是自以为是。您可以创建一个指针并使用 pointer arithmetics 导航到项目,实现与数组相同的行为,但长度不固定且语法略有不同。或者您可以使用图书馆、vector 或任何适合您的任务和品味的东西。