-4
A
回答
7
您可以使用cdecl助阵:
int *arr[3]
赋予 “声明改编为指针数组3为int”。int (*arr)[3]
给出 “声明ARR作为指针整型阵列3”int*(arr[3])
给出 “声明ARR作为指针的阵列3为int”。
此外,当然这些不是“真正”的声明;没有终止分号,并且在同一范围内不能有三个名为arr
的变量。
3
它’通常知道您使用的语言而不是依靠工具来破译源代码是一个好主意,所以我不建议使用C声明分析器。
一个简单的方法来记住的优先级是要记住的main
签名,即
auto main(int argc, char* argv[])
-> int
…你知道argv
是一个指针数组(或者技术上指向这样一个数组的第一个元素的指针:声明衰减到char** argv
)。
这意味着,给定argv
可以索引它来得到一个指针,argv[i]
,然后解引用,结果得到一个char
,使相当于括号内声明
char* (argv[])
声明
char (*b)[3]
表示通过取消引用b
即*b
,你得到一个可以索引的数组,(*b)[]
,所以b
是一个指向数组的指针。
它’ s不是指向此类数组的第一项的指针。它是’的一个指向的阵列本身。因此,将1加到b
会给你一个指向相同大小的后续数组的指针。
0
后缀运营商如[]
和函数调用()
具有比一元*
更高的优先级,所以像*a[N]
一个声明将被解析为*(a[N])
,或“指针的N元件阵列”。要声明“指向N元素数组的指针”,您需要明确地将一元*
与数组名称或(*a)[N]
分组。
这是一个方便的图表。
T a[N] -- N-element array of T
T *a[N] -- N-element array of pointer to T
T (*a)[N] -- pointer to N-element array of T
T f() -- function returning T
T *f() -- function returning pointer to T
T (*f)() -- pointer to function returning T
您可以结合到上述情况相当复杂声明:
T (*a[N])() -- N-element array of pointers to functions returning T
T (*f())[N] -- Function returning pointer to N-element array of T
T (*(*f())[N])[M] -- Function returning pointer to N-element array of pointer
to M-element array of T
当读取一个毛茸茸的声明,先从最左边的标识和工作的方式了,记住上面的规则:
f -- f
f() -- is a function returning ("()" has higher precedence than "*")
*f() -- a pointer to
(*f())[N] -- an N-element array of
*(*f())[N] -- pointers to
(*(*f())[N])[M] -- M-element arrays of
T (*(*f())[N])[M] -- T
相关问题
- 1. 数组的类型声明
- 2. Java数组类型声明
- 3. 如何声明不同数据类型的数组
- 4. 具有不同类型的2维数组的声明
- 5. 声明数组中的类型?
- 6. 如何声明新类型的数组?
- 7. Xtext,声明数组和结构类型
- 8. VBA如何声明具有不同数据类型的元素的数组
- 9. 我该如何声明一个具有不同类型数据的数组?
- 10. 声明的类型
- 11. 声明数据类型
- 12. 新类型声明函数?
- 13. 声明相同类型的Java
- 14. JAXB解组与声明的类型不填充数据
- 15. 不同类型的数组
- 16. 不同类型的数组
- 17. 相同的声明,我想两种不同类型的
- 18. 不同的函数声明
- 19. 声明具有相同名称但不同类型的属性
- 20. 不同的智能感知不同的数组声明
- 21. 类型不匹配错误,二维数组声明
- 22. php:声明函数的参数类型
- 23. Haskell类型声明
- 24. 无类型声明
- 25. 声明新类型
- 26. Data.Map类型声明
- 27. Java类型声明
- 28. 声明typedef类型
- 29. Storage.prototype.setObject声明类型
- 30. 空类型声明
http://c-faq.com/decl/spiral.anderson.html – chris 2014-09-02 13:19:06
http://cdecl.org/ – P0W 2014-09-02 13:20:20
第一个和第三个是一样的。 – 2014-09-02 13:21:02