标志设计宣传册设计公司,seo大牛,装修风格有哪些,wordpress手机模版数组与指针看起来很像 int a[] {1, 2 ,3}; int *p a; 如此,我们可以p[0], p[1], p[2] 看起来,与直接使用数组名没什么两样,但是看这段代码 sizeof(a) sizeof(p) 你就会知道,原来数组里还隐含了大小信息,这是指针所不能做到的 严格的说,数组是一种内置的数据类型,C标准对这种数…数组与指针看起来很像 int a[] {1, 2 ,3}; int *p a; 如此,我们可以p[0], p[1], p[2] 看起来,与直接使用数组名没什么两样,但是看这段代码 sizeof(a) sizeof(p) 你就会知道,原来数组里还隐含了大小信息,这是指针所不能做到的 严格的说,数组是一种内置的数据类型,C标准对这种数据类型限定的某些行为使他看起来像 指针 1array are passed by reference by default 这句话是说,我们可以将数组名赋给指针,将数组名放进函数参数中,则数组会退化成指针,再用sizeof得不到尺寸信息 void func(int a[]); 很多人以为这个函数只接受数组为参数,结果在函数内部sizeof(a)发现,它就是一指针int*,坑人 2array are not assignable 这里最关键的是数组名不能作为左值,不管是用int a[3]声明的数组还是int a[] new int[3];得到的数组 在基本数据类型里,引用也具有这种从一而终的特性 3如何真正的传递数组(避免它退化成指针) 看下面的函数原型 void func(int(a)[100]); 这个函数只接受大小为100的整型数组,有没有发现,我们按引用类型来传参数,就能避免数组退化成指针 当然这么写没什么用,毕竟一个只能传递定长数组的函数也只能看看而已 利用c模板编程的手法,可以这样子: templatesize_t N void func(int(a)[N]); 这样就能接受任意大小的数组了,而且只接受数组转载于:https://www.cnblogs.com/hustxujinkang/p/4981751.html