理解C/C++的复杂声明
时间:2010-05-17 来源:michaelo
“右左法则”是一个简单的法则,但能让你准确理解所有的声明。这个法则运用如下:从最内部的括号开始阅读声明,向右看,然后向左看。当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都被分析完毕。
对上述“右左法则”做一个小小的修正:当你第一次开始阅读声明的时候,你必须从变量名开始,而不是从最内部的括号。
再来看一个例子: int *( *( *arr[5])())();
阅读步骤: 1. 从变量名开始--- arr 2. 往右看,发现是一个数组---一个5元素的数组 3. 向左看,发现一个* ---指针 4. 跳出括号,向右看,发现() ---不带参数的函数 5. 向左看,碰到* --- (函数)返回一个指针 6. 跳出括号,向右发现() ---不带参数的函数 7. 向左,发现* --- (函数)返回一个指针 8. 继续向左,发现int --- int类型
总结: arr是一个5元素的数组,每个元素是一个指针,该指针指向一个不带参数的函数,该函数返回一个指针,该指针指向一个不带参数返回整型指针的函数.
对上述“右左法则”做一个小小的修正:当你第一次开始阅读声明的时候,你必须从变量名开始,而不是从最内部的括号。
再来看一个例子: int *( *( *arr[5])())();
阅读步骤: 1. 从变量名开始--- arr 2. 往右看,发现是一个数组---一个5元素的数组 3. 向左看,发现一个* ---指针 4. 跳出括号,向右看,发现() ---不带参数的函数 5. 向左看,碰到* --- (函数)返回一个指针 6. 跳出括号,向右发现() ---不带参数的函数 7. 向左,发现* --- (函数)返回一个指针 8. 继续向左,发现int --- int类型
总结: arr是一个5元素的数组,每个元素是一个指针,该指针指向一个不带参数的函数,该函数返回一个指针,该指针指向一个不带参数返回整型指针的函数.
相关阅读 更多 +