C语言(一)

1.结构体的大小

struct name1{
char str;
short x;
int num;
};求sizeof(name1)?

int所占字节是最大的为4,以它为参照标准

char所占字节为1,short所占字节为2,                                    int所占字节为4 

一个圈⭕代表一个字节

⭕char                        ⭕⭕short                   ⭕空                 ⭕⭕⭕⭕int

sizeof(name1) = 8

struct name2{
char str;
int num;
short x;
};求sizeof(name2)?

⭕⭕⭕⭕  |          ⭕⭕⭕⭕    |       ⭕⭕⭕⭕

sizeof(name2)=12

给定结构struct  A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};问sizeof(A) = ?

sizeof(A) = 8

 2.数组和链表的区别?(3点)

1)大小方面:数组大小在定义时就已经确定,而链表不是;

(2)存储地址:数组元素存储地址连续,而链表不一定是;

(3)插入与删除操作:数组的这些操作都需要移动数组中的元素,而链表只需要改变指针即可。

3.c和c++中的struct有什么不同?

(1)c 中的 struct 不可以含有成员函数,而 c++ 中的 struct 可以。

(2)c++ 中 struct 默认为权限为 public,而 class 默认为 private。

4.要对绝对地址 0x100000 赋值,我们可以用 (unsigned int *)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是 0x100000 去执行,应该怎么做?

1)首先要将 0x100000 强制转换成函数指针,即:

(void (*)())0x100000

2)然后再调用它:

((void (*)())0x100000)();

5.int a,b,c 请写函数实现c=a+b ,不可以改变数据类型,如将c改为long int,关键是如何处理溢出问题

// 1. 两个正数相加;

a > 0 && b > 0 就是判断两数都是正数;

如果没有溢出,则和 c 必定大于 a、b, 反之溢出;

// 2. 两负数相加;

a < 0 && b < 0 判断两数都是负数;

如果没有溢出,则和 c 必定小于 a、b, 反之溢出;

// 3. 综上

return (a>0 && b>0 && (*c<a||*c<b) || (a<0 && b<0 && (*c>a || *c>b)));    

bool add (int a, int b,int *c)

{

*c=a+b;

return (a>0 && b>0 &&(*c<a || *c<b) || (a<0 && b<0&&(*c>a || *c>b)));

}

6.关键字

1)volatile有什么含意? 并给出三个不同的例子。

 一个定义为volatile的变量是说,这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

(1)并行设备的硬件寄存器(如:状态寄存器)

(2)一个中断服务子程序中会访问到的非自动变量

  (3)多线程应用中被几个任务共享的变量

2)const 关键字的作用

 (1)可以定义const常量,具有不可变性

(2)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。

(3)为 c++ 函数重载提供了一个参考。

class A {
  void f(int i) {......} 			//一个函数
  void f(int i) const {......} 		//上一个函数的重载
};

(4) 可以节省空间,避免不必要的内存分配

(5)  提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

3)static关键字的作用

1.限制变量的作用域(static全局变量);
2.设置变量的存储域(static局部变量)。

  • (1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
  • (2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。
  • (3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。
  • (4)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用 static 修饰。
  • (5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)。

C语言中static,const和static const 的区别 - 简书 (jianshu.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值