标签:联系 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