C 语言 - 右左法则与实践练习题 答案解析
右左法则与实践练习题
下面这几个声明,请尝试使用右左法则阅读,并写出它们的含义:
int* a[5];
int (*a)[5];
int (*a)(int);
int* (*a[3])();
解析
1. int *a[5];
右左法则解析:
从变量名 a
开始:
a[5]
:说明a
是一个数组,包含 5 个元素- 每个元素是
int *
:也就是说,数组中的每个元素都是一个指向int
的指针
结论:
a
是一个 含有 5 个指向 int 的指针 的数组。
图示理解:
int *a[5]; → [ *a[0], *a[1], *a[2], *a[3], *a[4] ]
2. int (*a)[5];
右左法则解析:
从变量名 a
开始:
(*a)
:说明a
是一个指针(*a)[5]
:说明a
是一个指向含 5 个 int 元素的数组的指针
结论:
a
是一个 指向含有 5 个 int 的数组的指针。
图示理解:
int (*a)[5]; → a -----> [int, int, int, int, int]
3. int (*a)(int);
右左法则解析:
从变量名 a
开始:
(*a)
:说明a
是一个指针(*a)(int)
:说明a
是一个指向函数的指针,这个函数接受一个 int 参数- 函数返回
int
结论:
a
是一个 指向函数的指针,这个函数接收一个 int
参数并返回一个 int
值。
图示理解:
int (*a)(int); → a ---> function(int) → int
4. int *(*a[3])();
右左法则解析:
从变量名 a
开始:
a[3]
:说明a
是一个 数组,包含 3 个元素- 每个元素是
(*a[i])()
:说明数组中的每个元素是一个函数指针 - 每个函数指针指向的函数 不接受参数(
()
)并且 返回int *
结论:
a
是一个 数组,包含 3 个指向函数的指针,这些函数无参数,返回 int *
类型的指针。
图示理解:
int *(*a[3])(); → [ func1() → int*, func2() → int*, func3() → int* ]
右左法则与实践原文链接如下:
https://blog.csdn.net/weixin_52631945/article/details/147101592?spm=1011.2415.3001.5331
(完)