标签:联系 foo return log 维数 div com member ati
首先,数组名不是常量指针,从两方面:
其次,为什么很多老师都说数组是常量指针
切入正题,我们从类型系统和隐式转换规则来讲:
更进一步,二维数组type[size1][size2],实际上就是元素类型是数组的数组,进行隐式转换后得到的首元素指针类型是type(*)[size2],指向数组的指针,对这个指针加减,得到的也是数组的指针,对它解引用,得到数组。这一套过程,用那个什么数组名是常量指针的说法,是解释不来的。
最后出一个题:写出程序输出
typedef char(*AP)[5]; AP foo(char* p) { for (int i = 0; i < 3; i++) { p[strlen(p)] = ‘A‘; } return (AP)p+1; } int main() { char s[] = "FROG\0SEAL\0LION\0LAMB"; puts(foo(s)[1] + 2); }
这个题用数组名是指针那套理论是做不出来的。
标签:联系 foo return log 维数 div com member ati
原文地址:http://www.cnblogs.com/enyala/p/7745817.html