C/C++语言基础知识

C/C++程序占用的内存分为以下几部分:

程序代码区:常量区存放常量。程序结束时由OS回收。
全局区(静态区)存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束时由OS回收。
堆区存放的变量(用new,malloc,calloc,realloc等分配内存函数得到的变量)由程序员分配释放。
栈区存放的变量(局部变量、函数参数等)由编译器自动分配释放

假定x和y为double型,则表达式x=2,y=x+3/2的值是

D 3/2这个是取整运算,3/2的整数部分是1,则2+1得3。又因为是double型变量,所以结果就是D

x = 218.82631; printf("%-6.2e\n", x);

6.2e 一个一个解释
6 表示输出的位宽,如果结果小于6位,则不足的部分以空格补充,如果超于6位则没影响;
.2 保留两位小数
e 以指数形式输出,即10的n次幂,e+02即表示10^2

  • 负号,表示左对齐还是右对齐,2.19e+02 占9位(代码执行测试得到,通过不断修改6的结果,直到改到10,才出现了%6.2e输出时,左侧添加空格占位)。所以 - 表示左对齐,结尾右侧补空格,而+情况是右对齐,即左侧开头补空格
    所以对于218.82631输出结果应为2.19*10^2,转换成计算机的代码输出格式即2.19e+02

下面哪个指针表达式可以用来引用数组元素a[i][j][k][l]

*(a+i) = a[i]
*(a+i)+j = a[i] +j
*((a+i)+j) = a[i][j]
*((a+i)+j)+k = a[i][j]+k
*( *((a+i)+j)+k ) = a[i][j][k]
*( *((a+i)+j)+k )+l = a[i][j][k]+l
*( *( *((a+i)+j)+k )+l ) = a[i][j][k][l]

在这里插入图片描述 则有语法错误的是()

int x =5;
const int * const p = &x;
const int &q=x; 
int const *next=&x;
const int *j=&x;

A.p是指针常量,p是代表x的值,被定义为常量,不可再赋值,A错;
B.&q是对x变量的引用,但被定义为了常量,故q不再是变量,不能自增,B错;
C.如果const位于
的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量,故x为常量,不能改变,但是next指向x的地址,next++表示改变地址,故c选项无语法错误;
D.(*j)++表示x的值自增,但是const int *j=&x表示x为常量,不能改变,故d错误
const详解

在32位系统上,下面函数的执行结果是输出

char str[] = “xunlei”;
char *p = str;
int n = 10;
printf("%d,%d,%d\n", sizeof(str), sizeof§, sizeof(n));
sizeof(str),str是字符数组,所以第一个是7个字节
sizeof§, str的首元素地址赋给指针p,指针总占4个字节
sizeof(n), int型整数,所以4个字节
char str[]=“xunlei”;
char str2[]={‘x’,‘u’,‘n’,‘l’,‘e’,‘i’};
//sizeof(str)计算’\0’,sizeof(str2)不计算’\0’

1、static_cast和dynamic_cast的区别:

1)static_cast          
1.1)没有虚函数同样可以编译通过;
1.2)用于非多态类型转换(静态转换),任何标准转换都可以用它,
最常用的类型转换符,用于基本数据类型之间的转换,如把int转换为char,
但是不能用于两个不相关的类型转换。
1.3)用于类层次结构中基类和派生类之间指针或引用的转换,                             
上行转换(派生类---基类)是安全的,与dynamic_cast效果相同;    
下行转换(基类---派生类)由于没有动态类型检查,所以是不安全的;   
1.4) 把空指针转换成目标类型的空指针                
1.5) 把任何类型的表达式转为void类型           
1.6) static_cast不能转换掉expression的const、volatile、或者__unaligned属性 

int e = 10;  
const int f = static_cast<const int>(e);//正确,将int型数据转换成const int型数据  
const int g = 20;  
int *h =static_cast<int*>(&g);//编译错误,static_cast不能转换掉g的const属性            

2)dynamic_cast     
2.1)dynamic_cast只能用于有虚函数的类(必须有共有继承和虚函数),为运行时转换,由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表中,只有定义了虚函数的类才有虚函数表,没有定义虚函数的类是没有虚函数表的;
    如果父类没有虚函数,编译报错;              
2.2)用于类层次结构中基类和派生类之间指针或引用的转换, 
    上行转换(派生类--->基类)是安全的,与static_cast效果相同;
    下行转换(基类--->派生类)具有类型检查的功能,转型是安全的,
    当类型不一致时,转换过来的是空指针;
2.3)先检查能否转型成功,能成功则转型,不能成功则返回0  
static_cast和reinterpret_cast的区别:

static_cast不适用于不同指针类型之间的转换, 因为它们是完全不同的两个类型. 
如果 自己清楚自己在做什么, 通常对于不同指针类型的转换应该使用reinterpret_cast

new操作符的使用

栈中内存的分配和管理由操作系统决定,而堆中内存的分配和管理由管理者决定。
new详解

三大性质总结:原子性,有序性,可见性

添加链接描述

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C/C++语言是一种广泛应用于软件开发的编程语言。它具有高效的执行速度、灵活的语法和强大的功能,被广泛用于嵌入式系统、操作系统、游戏开发等领域。 在C/C++语言的面试中,常见的问题包括以下几个方面: 1. 数据类型:C/C++语言中有各种不同的数据类型,如整型、浮点型、字符型、指针等。面试题可能会涉及到不同数据类型的特点、取值范围、大小等方面的问题。 2. 内存管理:C/C++语言需要手动管理内存,因此面试题可能会涉及到堆和栈的区别、内存泄漏的原因及如何避免等方面的问题。 3. 指针和引用:C/C++语言中指针和引用是非常重要的概念,面试题可能会涉及到指针和引用的区别、使用场景、指针数组等方面的问题。 4. 字符串处理:C/C++语言中,字符串是以字符数组的形式存储的,面试题可能会涉及到字符串的输入、输出、比较、拷贝等方面的问题。 5. 文件操作:C/C++语言提供了丰富的文件操作函数,面试题可能会涉及到文件的打开、读写、关闭等方面的问题。 6. 面向对象编程:C++语言支持面向对象编程,面试题可能会涉及到类、对象、继承、多态等方面的问题。 在准备面试时,除了掌握C/C++语言基础知识外,还可以多做一些相关的编程练习题,提高自己的编程能力和思维灵活性。通过深入理解C/C++语言的特性和原理,做好面试准备,可以增加面试成功的机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值