int nums[5];
做什么?当我将nums
传递给std::cout
时,它打印出我认为的内存地址,但我不明白代码本身在运行时实际做了什么。
答案 0 :(得分:2)
int nums[5];
为5 int
个值的静态数组分配内存。
当您执行std::cout << nums;
时,它实际上正在调用std::cout.operator<<(nums);
虽然std::cout
为许多不同的类型类型定义了许多<<
个运算符,但它没有<<
1}}运算符接受int[]
数组作为输入。它具有的是<<
运算符,它接受const void*
内存指针作为输入。它打印指针指向的内存地址的值。
静态数组可以“衰变”#34;转换为指针,在本例中为int*
。
可以将任何类型的指针分配给void*
。任何非const
变量都可以分配给兼容类型的const
变量。这就是为什么当你调用std::cout << nums;
时编译器不会抱怨的原因。它基本上与幕后的std::cout.operator<<((void*)(int*)nums);
类似。
答案 1 :(得分:-2)
&#39; NUMS&#39;是一个包含5个int类型数据的数组。例如: int nums [5] = {1,2,3,4,5};
如果你想讨论nums,你应该像这样编写你的代码:
for(int index = 0; index < 5; index ++){
std::cout<<nums[index]<<std::endl;
}
但是,如果你想要cout它的内存地址,你应该像这样写代码:
for(int index = 0; index < 5; index ++){
std::cout<<nums<<std::endl;
nums ++;
}