C++工程师面试宝典系列之C/C++经典面试题

1.const 的全面理解:

(1)说说你对const 的理解(主要C语言范围内)

const是一个C中类型修饰符;

常见的类型修饰符有:short,long,unsigned,signed,static,auto,extern,register,volatile;

定义一个变量:类型描述符  变量名;

类型描述符包括:类型的修饰符以及数据类型 int  char  float ......

1)类型描述符中如果有多个关键字,它们出现的位置不影响他对变量的限制:

short  int  i;

int   short   i;

static  int  short   i;

int  static  short  i;

(2)下面的声明都是什么意思?

const  int   a

int   const   a

以上完全一样,描述的都是一个const的整型变量。

const   int   *a

int*   const   a

int   const*   const  a

对指针变量类型的理解:

1).   []  ()  *  在数据定义时与在表达式中优先级一样的理解。例如:

int  *a[10]     //因为 [] 的优先级 高于* ,因此是一个数组,每个成员类型为指针,指向int

int  (*a)[10]    //因为()的优先级高于[] ,因此,先看里面,是一个指针,指向的类型为一个数组

2).   指针的判断从右向左:

const   int   *a     //a是变量名,*表示它是一个指针(类型已经确定),余下的是指向的类型;

    //因此,a是一个指向const int 的指针,即指向的数据不可修改;

int*   const   a    // *const一起来修饰a,即a只读,*表示a是一个指针,因此,这是一个只读指针,指向的类型为int型                             //  的变量

int   const    *const  a   // *表示指针,因此指针不可修改,int const是指针指向的类型,仍然是const;


(3)

typedef   void*   VP;

(a)const   void   *ptr存储位置;

(b)const   VP  ptr存储位置;

首先要理解typedef是定义一种数据类型,一定要与define区分开;

typedef   void*   VP;     //  VP是名字,余下的是这个类型的真实类型

const  VP  ptr;    //  是不是替换为const  void  *ptr;??不是,void*是一个整体

                            //    const  int  i;  ==  int  const  i;

                            //    VP  const  ptr;  即 void  *const ptr;

(4)为什么还在编程中全用const?

1).向其他程序员传递一个信息。这个不要修改。

2).有可能让编译器产生更精简紧凑代码,减少bug。

3).合理的保护我们只读的数据,避免不必要的错误。

使用位置:

1)定义常量,防止被修改;

2)函数的参数中,如果不期望子函数去修改被调用函数的某个数据,可以加以限制。例如:

char  *strcpy(char  *dest , const  char  *src);

char  *strcpy(char  *dest,const  char  *src,size_tn);

3) 在C++中,类的成员函数的使用。


2. sizeof 是函数吗?准确的列出sizeof() 的功能。以下代码中(32位平台):

int  a[10];

int   *ptr;

以下内容作为右值时,是否正确,如果正确,值为多少?

sizeof(a)

sizeof(a[10])

sizeof(a[1])

sizeof(ptr)

sizeof(*ptr)

sizeof(int)*ptr

(1)谈谈你对sizeof 的理解。

sizeof不是函数,C语言的一个关键字,作为右值时,求某个数据类型(sizeof(int))或某个变量对应的数据类型sizeof(a)来定义某个变量时,在当前平台下所需要占用内存空间的大小。并不是真正求某个变量本身的内存空间大小,也不会涉及到对这个空间的访问。

sizeof(a)               // 找到a的类型,int[10]是a 的类型,因此是一个数组,相当于sizeof(int[10]),值40(32位平台)

sizeof(a[10])        // a[10]本身是一个越界访问,但是,这里并不是去访问a[10]的空间大小,而是求它的类型

      // a[10]  ---->  *(a+10) 即a指向的类型,即int型,因此,求的是sizeof(int)即4个字节。

sizeof(a[1])          //  同上,4字节。

sizeof(ptr)           //  指针本身类型占用空间大小,32位平台4个字节。

sizeof(*ptr)          //  ptr指向的数据类型,因此为int型,4个字节。

sizeof(int)*ptr      //  编译出错的。sizeof(int), *ptr取内容, 中间没有运算符。


3.static 的理解

[cpp]  view plain   copy
  1. #include<stdio.h>  
  2. int counter(int i){  
  3.      static int count = 0;  
  4.      count = count + i;  
  5.      return(count);  
  6. }  
  7. main(){  
  8.      int
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值