1. 数组作为函数的参数,会退化为函数指针
数组作为函数的参数将变成指针类型,将指针传入时,即是求指针的sizeof。32位系统的指针是一个int,4个字节。
1 在32位机器中,如下代码: 2 3 void example(char acWelcome[]){ 4 printf("%d",sizeof(acWelcome)); //32位机器输出4,64位机器输出8 5 return; 6 } 7 void main(){ 8 char acWelcome[]="Welcome to Huawei Test"; 9 printf("%d",sizeof(acWelcome)); //输出32 10 example(acWelcome); 11 return; 12 }
2. 内置类型与自定义类型被new时的动作
对于内置类型而言,new仅仅是分配内存,除非后面显示加(),相当于调用它的构造函数。
对于自定义类型而言,只要一调用new,那么编译器不仅仅给它分配内存,还调用它的默认构造函数初始化,即使后面没有加()。
1 下面描述正确的是 2 3 int *p1 = new int[10]; //p1申请的空间里的值是随机值
4 int *p2 = new int[10](); //p2申请的空间里的值已经初始化
3. 指针位移
指针是跳类型不是跳字节的。
一个unsigned long占4个字节,所以跳5就是偏移4*5=20个字节,16进制即为14,加上段地址0x810000就是0x810014。
1 unsigned char *p1; 2 unsigned long *p2; 3 p1=(unsigned char *)0x801000; 4 p2=(unsigned long *)0x810000; 5 6 请问 7 p1+5= ? //0x810005 8 p2+5= ? //0x810014
4. 枚举变量
枚举变量是全局变量的情况下, 枚举值的缺省值是0,不是枚举的第一个值。 其他情况,其值是不定的,而且不限定于所列出的枚举值。
enum只是定义了一个常量集合,里面没有“元素”,枚举类型是当做int类型存储的, sizeof值都为4 ,并且系统为其初始化为0;
内置类型的变量,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0.而定义在函数体内部的内置类型变量将不被初始化。《C++ primer 5th》p40 默认初始化
1 enum string{ 2 x1, 3 x2, 4 x3=10, 5 x4, 6 x5, 7 } x; 8 9 函数外部问x等于什么? //0
时间: 2024-11-05 13:43:48