c – 为什么我不能使用’const int *’和’const char *’一起创建一个int数组?
作者:互联网
为什么我可以用这种方式创建字符串或字符数组:
#include <iostream>
int main() {
const char *string = "Hello, World!";
std::cout << string[1] << std::endl;
}
?并且它正确地输出第二个元素,而我不能在没有数组的下标符号[]的情况下创建整数类型的数组? char和one之间有什么区别:const int * intArray = {3,54,12,53} ;.
解决方法:
“为什么”是:“因为字符串文字是特殊的”.字符串文字存储在二进制文件中,作为程序本身的常量部分,const char * string =“Hello,World!”;只是将文字视为存储在别处的匿名数组,然后它将指针存储在字符串中.
对于其他类型没有等效的特殊行为,但是您可以通过创建命名的静态常量并使用它来初始化指针来获得相同的基本解决方案,例如:
int main() {
static const int intstatic[] = {3,54,12,53};
const int *intptr = intstatic;
std::cout << intptr[1] << std::endl;
}
静态const数组的作用是分配字符串文字将使用的相同常量空间(尽管不像字符串文字,编译器识别重复数组和合并存储的可能性较小),但作为命名变量而不是匿名一.字符串大小写可以以相同的方式显式:
int main() {
static const char hellostatic[] = "Hello, World!";
const char *string = hellostatic;
std::cout << string[1] << std::endl;
}
但直接使用文字使事情变得更清洁.
标签:c,arrays,pointers,literals 来源: https://codeday.me/bug/20190823/1699794.html