c与指针 13章问题1 答案,我感觉智商被磨擦,指针yyds,相信看完你一定会有收获

277 阅读10分钟

题目

  1. int abc();
  2. int abc[7];
  3. int **abc();
  4. int (*abc)();
  5. int (*abc)[6];
  6. int *abc();
  7. int **(*abc[5])();
  8. int **abc[4];
  9. int *(*abc)[3];
  10. int *(*abc())();
  11. int (**(*abc)())();
  12. int (*(*abc)())[2];
  13. int *(*(*(*abc)())[10])();

        你懵了没,前面还好,后面的几个简直要人命,如果你没把握全部都知道,那么往下看吧,相信你会有有收获的。

        我们怎么搞定这种东西 ,一个原则,从变量名开始,一步一步的按结合顺序往外走 小括号优先级最高,其次是下标运算符 [] ,然后是间接运算符*,最后数据类型

开始分析

  1. int abc(); 找到变量名abc,先和()结合,得出结论 abc 是一个函数,函数就必定有返回值,返回值是啥呢,看下一个结合的东西,是int ,说明函数返回值是 int 型。所以得到最终结论,abc 是一个函数,函数返回值是 int 类型
  2. int abc[7]; 找到变量名abc,先和 [7] 结合,得到结论,abc是一个可以存放7个数据的数组,数组那就得有元素数据类型,类型是啥呢,看下个结合的东西,是int ,说明元素数据类型是 int 型。所以得到最终结论,abc 是一个可以存放7个数据的数组,数组元素的数据类型是 int 类型
  3. int **abc(); 找到变量名abc,先和()结合,得出结论 abc 是一个函数,函数就必定有返回值,返回值是啥呢,看下一个结合的东西,是* ,说明函数返回值是个指针。指针必须指向某个东西,它指向啥呢?看下一个结合的东西,还是* ,说明指针指向了另外一个指针,同理,第二个指针指向啥呢?看下一个结合的东西,是int ,说明第二个指针指向一个 int 数据。所以得到最终结论,abc 是一个函数,函数返回值是一个指向 int 型指针的指针(或者说返回值是一个int型的双重指针)
  4. int (*abc)(); 找到变量名abc,先和*结合,得出结论 abc 是一个指针,指针必须指向某个东西,它指向啥呢?看下一个结合的东西,是(),说明指针指向一个函数,函数就必定有返回值,返回值是啥呢,看下个结合的东西,是int ,说明函数返回值是 int 型。所以得到最终结论,abc 是一个指针,其指向一个函数(也就我们常说的函数指针),函数返回值是 int 类型
  5. int (*abc)[6]; 找到变量名abc,先和*结合,得出结论 abc 是一个指针,指针必须指向某个东西,它指向啥呢?看下一个结合的东西,是[6],说明指针指向一个可以存放6个数据的数组,数组那就得有元素数据类型,类型是啥呢,看下个结合的东西,是int ,说明元素数据类型是 int 型。所以得到最终结论,abc 是一个指针,它指向一个可以存放6个数据的数组,数组元素的数据类型是 int 类型
  6. int *abc(); 找到变量名abc,先和()结合,得出结论 abc 是一个函数,函数就必定有返回值,返回值是啥呢,看下一个结合的东西,是* ,说明函数返回值是个指针。指针必须指向某个东西,它指向啥呢?看下一个结合的东西,是int ,说明指针指向一个 int 数据。所以得到最终结论,abc 是一个函数,函数返回值是一个指向 int 型指针
  7. int **(*abc[5])(); 找到变量名abc,先和 [5] 结合,得到结论,abc是一个可以存放5个数据的数组,数组那就得有元素数据类型,类型是啥呢,看下个结合的东西,是* ,说明元素数据类型是指针,指针必须指向某个东西,它指向啥呢?看下一个结合的东西,是(),说明指针指向一个函数,函数就必定有返回值,返回值是啥呢,看下一个结合的东西,是* ,说明函数返回值是个指针。指针必须指向某个东西,它指向啥呢?看下一个结合的东西,还是* ,说明指针指向了另外一个指针,同理,第二个指针指向啥呢?看下一个结合的东西,是int ,说明第二个指针指向一个 int 数据。所以得到最终结论,abc 是一个可以存放5个数据的数组,数组元素的数据类型是函数指针,函数返回值是一个指向 int 型指针的指针
  8. int **abc[4]; 找到变量名abc,先和 [4] 结合,得到结论,abc是一个可以存放4个数据的数组,数组那就得有元素数据类型,类型是啥呢,看下个结合的东西,是* ,说明元素数据类型是指针,指针必须指向某个东西,它指向啥呢?看下一个结合的东西,还是* ,说明指针指向了另外一个指针,同理,第二个指针指向啥呢?看下一个结合的东西,是int ,说明第二个指针指向一个 int 数据。所以得到最终结论,abc 是一个可以存放4个数据的数组,数组元素的数据类型是指向int型指针的指针
  9. int *(*abc)[3]; 找到变量名abc,先和*结合,得出结论 abc 是一个指针,指针必须指向某个东西,它指向啥呢?看下一个结合的东西,是[3],说明指针指向一个可以存放3个数据的数组,数组那就得有元素数据类型,类型是啥呢,看下个结合的东西,是* ,说明元素数据类型是指针,指针必须指向某个东西,它指向啥呢?看下一个结合的东西,,是int ,说明指向的是一个 int 数据。所以得到最终结论,abc 是一个指针,指向一个可以存放3个数据的数组,数组元素的数据类型是int型指针
  10. int *(*abc())(); 找到变量名abc,先和()结合,得出结论 abc 是一个函数,函数就必定有返回值,返回值是啥呢,看下一个结合的东西,是* ,说明函数返回值是个指针。指针必须指向某个东西,它指向啥呢?看下一个结合的东西,是(),说明指针指向的是一个函数(函数2),函数2也必定有返回值,返回值是啥呢,看下一个结合的东西,是* ,函数2的返回值是指针(指针2),指针2也必须指向某个东西,它指向啥呢?看下一个结合的东西,是 int ,说明指向的是一个 int 数据。函数2的返回值是一个指向int数据的指针,。所以得到最终结论,abc 是一个函数,其返回值是一个函数指针,函数指针指向函数2,函数2的返回值是一个指向int数据的指针
  11. int (**(*abc)())(); 找到变量名abc,先和*结合,得出结论 abc 是一个指针,指针必须指向某个东西,它指向啥呢?看下一个结合的东西,是(),说明指针指向的是一个函数,函数必定有返回值,返回值是啥呢,看下一个结合的东西,是* ,说明函数返回值是个指针(指针2)。指针2必须指向某个东西,它指向啥呢?看下一个结合的东西,还是* ,说明指针2指向了另外一个指针(指针3),同理,指针3指向啥呢?看下一个结合的东西,是(),说明指针3指向一个函数(函数2)。函数2也必定有返回值,返回值是啥呢,看下一个结合的东西,是 int 说明函数的返回值是一个 int 数据 ,即函数2的返回值是 int 数据,指针3指向函数2,是一个函数指针,指针2指向指针3,是一个指向函数指针的普通指针。所以得到最终结论,abc 是一个指针,指向一个函数1,函数1的返回值是一个指向函数指针(指针3)的普通指针(指针2),函数指针(指针3)指向函数2,函数2的返回值是一个 int 数据
  12. int (*(*abc)())[2]; 找到变量名abc,先和*结合,得出结论 abc 是一个指针,指针必须指向某个东西,它指向啥呢?,看下一个结合的东西,是(),说明指针指向的是一个函数,函数必定有返回值,返回值是啥呢,看下一个结合的东西,是* ,说明函数返回值是个指针(指针2),指针2必须指向某个东西,它指向啥呢?看下一个结合的东西,是[2] ,说明指针2指向了一个可以存放2个数据的数组,数组那就得有元素数据类型,类型是啥呢,看下个结合的东西,是int ,说明元素数据类型是 int 型。所以得到最终结论,abc 是一个指针,其指向一个函数,函数返回值又是一个指针(指针2),指针2指向一个可以存放2个数据的数组,数组元素的数据类型是int
  13. int *(*(*(*abc)())[10])(); 找到变量名abc,先和*结合,得出结论 abc 是一个指针,指针必须指向某个东西,它指向啥呢?,看下一个结合的东西,是(),说明指针指向的是一个函数(函数1),函数1必定有返回值,返回值是啥呢,看下一个结合的东西,是* ,说明函数1返回值是个指针(指针2),指针2必须指向某个东西,它指向啥呢?看下一个结合的东西,是[10] ,说明指针2指向了一个可以存放10个数据的数组,指针2是一个数组指针,数组那就得有元素数据类型,类型是啥呢,看下个结合的东西,又是* ,说明元素数据类型是 指针(指针3),指针3必须指向某个东西,它指向啥呢?看下一个结合的东西,是(),说明指针3指向的是一个函数(函数2),指针3是一个函数指针,函数2必定有返回值,返回值是啥呢,看下一个结合的东西,还tm是* ,说明函数返回值是个指针(指针4),指针4必须指向某个东西,它指向啥呢?看下一个结合的东西,是 int ,说明指针4指向一个 int 数据,函数1的返回值是一个指向数组的数组指针2,函数2的返回值是一个指向 int 数据的普通指针4,函数指针3指向函数2,所以得到最终结论,abc 是一个指针,其指向一个函数,函数返回值又是一个数组指针(指针2),指针2指向一个可以存放10个数据的数组,数组存放的是一些函数指针(指针3),这些函数指针指向的函数(函数2)的返回值是一个指向int 数据的普通指针(指针4)

在这里插入图片描述

这个有点难,补一下步骤,int *(*(*(*abc)())[1])();---> int *(*(*ptr())[1])(); ---> int *(*(*function1)[1])(); ---> int *(*(ptr2)[1])(); ---> int *(*array)(); ---> int *(ptr3)(); ---> int * fuction2;