码迷,mamicode.com
首页 > 其他好文 > 详细

路漫漫,其修远~

时间:2017-04-18 10:15:30      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:将不   huawei   unsigned   位移   缺省值   函数   code   size   bookmark   

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

 

路漫漫,其修远~

标签:将不   huawei   unsigned   位移   缺省值   函数   code   size   bookmark   

原文地址:http://www.cnblogs.com/wangxiaokun/p/6725852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!