笔考试题:关于二维数组、数组指针、指针数组、指向指针的指针
笔试题:关于二维数组、数组指针、指针数组、指向指针的指针
函数 void func(int *a[10])和void func(int **a)是等价的吗?
函数 void func(int a[10][10])和 void func(int (*a)[10])是等价的吗?
暂时没看出区别,求指导。。。。。
------解决方案--------------------
建议lz去搜一下数组的指针和指针的数组这两个概念的区别,关于你的问题:
(1)void func(int a[10])和void func(int *a)对于参数要求是一样的,编译时,编译器都会当作void fun(int* a)处理,如果同时定义这两个函数,编译器还会报错,说重定义;同样的,void func(int *a[10])和void func(int **a)对编译器而言也是一样的,编译时都会当作是void func(int **a),实际上,我们写成T fun(type a[N])的函数,在编译时,编译器都会自动识别为T fun(type* a)。
实际上,把void func(int *a[10])写成void func(int* a[10]),把void func(int **a)写成void func(int** a),才是对类型理解清楚了哦
(2)对于void func(int a[10][10])和 void func(int (*a)[10]),两个func实际都要求传递的参数是一个指向元素个数为10的数组的指针,两种形式编译时,编译器都会当作void func(int (*)[10])来对待
说实话,很多时候我们把函数的参数写成数组的形式,是增强可读性而已
------解决方案--------------------
指针是有类型的
------解决方案--------------------
是。
写成下标的样子,只是提示/建议不要传递超过下标个数的数组/指针;但实际上是,传递超过的也可以,但是函数体类自己注意不要越界即可。不过这样就失去了原型想表达的文档上的意义了。
函数 void func(int *a[10])和void func(int **a)是等价的吗?
函数 void func(int a[10][10])和 void func(int (*a)[10])是等价的吗?
暂时没看出区别,求指导。。。。。
------解决方案--------------------
建议lz去搜一下数组的指针和指针的数组这两个概念的区别,关于你的问题:
(1)void func(int a[10])和void func(int *a)对于参数要求是一样的,编译时,编译器都会当作void fun(int* a)处理,如果同时定义这两个函数,编译器还会报错,说重定义;同样的,void func(int *a[10])和void func(int **a)对编译器而言也是一样的,编译时都会当作是void func(int **a),实际上,我们写成T fun(type a[N])的函数,在编译时,编译器都会自动识别为T fun(type* a)。
实际上,把void func(int *a[10])写成void func(int* a[10]),把void func(int **a)写成void func(int** a),才是对类型理解清楚了哦
(2)对于void func(int a[10][10])和 void func(int (*a)[10]),两个func实际都要求传递的参数是一个指向元素个数为10的数组的指针,两种形式编译时,编译器都会当作void func(int (*)[10])来对待
说实话,很多时候我们把函数的参数写成数组的形式,是增强可读性而已
------解决方案--------------------
指针是有类型的
------解决方案--------------------
是。
写成下标的样子,只是提示/建议不要传递超过下标个数的数组/指针;但实际上是,传递超过的也可以,但是函数体类自己注意不要越界即可。不过这样就失去了原型想表达的文档上的意义了。