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
或任何适合您的任务和品味的东西。
我正在玩一个函数来习惯一些 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
或任何适合您的任务和品味的东西。