首页 > 代码库 > 路漫漫,其修远~

路漫漫,其修远~

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

 

路漫漫,其修远~