m****s 发帖数: 1481 | 1 static const char* const grades[]={"A","B","C","D","Fail"};
比较糊涂,这里两个const分别定义什么东西是constant呢?谢谢 |
m*m 发帖数: 47 | 2 grades 是个const pointer 所指向的是个const char*. 从右往左读就好理解了。 |
n*****t 发帖数: 22014 | 3 写法比较怪,一般俩 const 连一块
【在 m*m 的大作中提到】 : grades 是个const pointer 所指向的是个const char*. 从右往左读就好理解了。
|
m****s 发帖数: 1481 | 4 明白了,谢谢
【在 m*m 的大作中提到】 : grades 是个const pointer 所指向的是个const char*. 从右往左读就好理解了。
|
b*******s 发帖数: 5216 | 5 一般是从右往左读,一读就明白了
【在 m****s 的大作中提到】 : static const char* const grades[]={"A","B","C","D","Fail"}; : 比较糊涂,这里两个const分别定义什么东西是constant呢?谢谢
|
m****s 发帖数: 1481 | 6 顺便再问下,按照从右往左读,这里这个static是指const char* 是静态的?也就是那
些字符串只初始化一次就不再变了。但是如果这一句是在一个function里,每次call这
个function,letters array里面存的地址还是重新从那些字符串那里初始化一次?
【在 b*******s 的大作中提到】 : 一般是从右往左读,一读就明白了
|
n*****t 发帖数: 22014 | 7 C 是把这些全放在 data segment 里的。array 存指针,编译的时候就初始化了,运行
时候不会再动了。static const 你就理解成 define 常量好了。
C++ 应该差不多吧?俺不懂胡说的
【在 m****s 的大作中提到】 : 顺便再问下,按照从右往左读,这里这个static是指const char* 是静态的?也就是那 : 些字符串只初始化一次就不再变了。但是如果这一句是在一个function里,每次call这 : 个function,letters array里面存的地址还是重新从那些字符串那里初始化一次?
|
d****n 发帖数: 1241 | 8 static和const是不同的。
static是一个storage specifier, 表示两层含义,(1)linkage, (2) storage
duration. 例如有类似下面的定义:
/* global scope */
static int g; /* g的visibility是file-scope */
那么表示变量g的linkage是internal的,在你所定义的文件外是不可见的;其次g具有
static duration storage, 意思是说,g只能在程序开始的时候,初始化一次,同时,
g这个对象在程序运行的过程中都是存在的.
你也可以在一个函数里定义一个static的变量,在这种情况下,这个static变量是
function-scope的。
const是type qualifier, 表示只读性。比如
const int g;
那么g所代表的对象是只读的,对g进行任何形式的写操作(比如直接写或者通过指针)
是undefined behavior.
【在 m****s 的大作中提到】 : 顺便再问下,按照从右往左读,这里这个static是指const char* 是静态的?也就是那 : 些字符串只初始化一次就不再变了。但是如果这一句是在一个function里,每次call这 : 个function,letters array里面存的地址还是重新从那些字符串那里初始化一次?
|
d****n 发帖数: 1241 | 9 准确的说编译器会把没有初始化的static变量放到bss里,有初始值的,放到data
segment里
【在 n*****t 的大作中提到】 : C 是把这些全放在 data segment 里的。array 存指针,编译的时候就初始化了,运行 : 时候不会再动了。static const 你就理解成 define 常量好了。 : C++ 应该差不多吧?俺不懂胡说的
|
f*******n 发帖数: 12623 | 10 一个const是关于pointer指向的那些char。另一个是关于pointer变量本身。
const char *
char const *
这两个是一样的。就是说pointer本身可以变,但是不能通过pointer来改指向的char。
char * const
这是说pointer本身不能变,但是可以通过pointer来改指向的char。
const char * const
char const * const
这两个是一样的。就是说pointer本身不能变,也不能通过pointer来改指向的char。
【在 m****s 的大作中提到】 : static const char* const grades[]={"A","B","C","D","Fail"}; : 比较糊涂,这里两个const分别定义什么东西是constant呢?谢谢
|