C/C++关于数据类型的一些问题

来源:互联网 发布:手机锁屏病毒源码 编辑:程序博客网 时间:2024/05/21 11:08
1.声明跟定义的本质区别是什么?

 声明就是指给除了当前变量或者函数,或者类什么的名字,不给其中的内容,就是先告诉你有这样一个什么类型的变量或者函数,但是这个变量或者函数的具体信息却是不知道的。就好比跟你介绍一个人的时候,声明就是只告诉你这个人叫什么,但是缺不给你说这个人到底怎么样,他有哪些优点,缺点,喜好问题是什么的
 定义就不一样了,定义直接告诉你了所有的东西,这个变量是什么,这个函数是什么功能,这个类里面包含了什么东西。很具体的说明


2.在使用const时,该如何辨别它是修饰什么的?

1)将类型(int等)去掉
2)看const修饰谁,谁的值就是不能修改的


3.在使用register修饰变量时应该注意什么?

1)待声明为寄存器变量类型应该是CPU寄存器所能接收的类型,意味着寄存器变量是单个变量,变量长度应该小于寄存器长度
2)不能对寄存器变量使用取地址符“&”,因为该变量没有内存地址
3)尽量在大型频繁操作时使用寄存器变量,且声明的变量个数应该尽量少。


4.使用volatile修饰变量的作用是什么?

例: 1  int a = 10;
        2  int b = a;
        3  int c = a;
编译器在扫描上述代码后发现在给a赋值后,a的值意志没有改变,所以在运行后两行程序时,编译器为了提高效率,会直接将10赋给b,c
但是,如果该代码运行在多线程中,在一个线程上下文中没有改变它的值,不代表别的线程也不会改变它的值,所以为了防止这种情况出现,我们可以将一些变量声明为volatile,这样每次对其值访问时,都会从内存里,寄存器里读取,从而保证数据的一致


5. 枚举与#define 宏的区别

1)#define 宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值

2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量

3)枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个


6.使用extern时应该注意什么?

1) 多个源文件 共享变量和函数时,,由于多个C源文件的编译是独立的,所以编译器无法判断多个源文件共享的变量的类型是否一致,等到链接的时候,多个源文件编译后的.o文件连接成一个目标文件,如果有一个以上源文件对同一个变量进行了初始化,则报错,至少GCC是这样。

2)在写程序时,如果使用extern函数,一定要注意外部函数的参数类型,参数个数和返回值类型,最好保持一致,要不然会出现意想不到的问题


7.使用typedef的作用和目的是什么?

作用:为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(如int,char等)和自定义的数据类型(如struct等)

目的: 1)给变量起一个易记且意义明确的新名字。
        2)简化一些比较复杂的类型声明


8.typedef与#define的区别和各自的优点

#define只是简单的字符串替换而typedef则是为一个类型起新名字。

#define 宏定义可以用#ifdef和#ifndef等来进行逻辑判断,还可以使用#undef来取消定义

typedef符合范围规则,使用typedef定义的变量类型,其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性


9.枚举类型的使用方法

一般的定义方式如下:
enum enum_type_name
{
ENUM_CONST_1;
ENUM_CONST_2;
ENUM_CONST_3;
......
ENUM_CONST_n;
}enum_variable_name;
enum变量类型还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始依次加1,如果都没有赋初值,他们的值从0开始依次加1.


10.联合体的使用方法及作用

union  联合名
{
成员表
};
成员表中含有若干成员,成员的一般形式为
类型说明符  成员名
成员符的命名应符合标识符的规定。

在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(n选一),我们也可以使用联合体来发挥其长处
原创粉丝点击