c语言学习day07

函数返回值的接受过程,也是拷贝

函数返回值如果没有变量接收,也会随着函数执行完而被销毁

int func(int *p){}

int *p;

func(p);//func(p)改变不了p的值,因为是int *型的值传递,若想改变p的值,需定义成int func(int **p){};调用时写成func(&p)

函数设计时,要保证函数的返回值指向的不是局部变量,因为如果是,在函数结束时,函数已被销毁,返回值指向的为内容为空;

如果函数返回值指向的是只读区、静态数据段(静态区的内容会放到数据段)、堆区的内容,那么可以

常量表达式,例如1+2、365*24*3600等,在编译后他们的值就已经确定下来,不用计算后再赋值

面试题:

1.#define SECONDS_OF_YEAR (365*24*3600)UL

加ul是为了保证在所有的设备中都能运行,为了可移植性,有的设备出问题可能就是类型没有定义明确。有的设备的int为16位,这样上面的数据可能就放不下了,此时会发生数据的丢失

2.int(*a[10])(int);//变量名先与右边的符号结合,遇到方括号是数组,遇到圆括号是函数

3.static的作用

static用来修饰局部变量,该变量就保存在静态数据区,生存周期直到程序结束

用来修饰全局变量,防止重命名,限制变量名只在本文件内有效

用来修饰全局函数,防止重命名,限制函数名只在本文件内有效

4.const的含义:只读,只是简易性,不具备强制性;const在c++中是常量

5.volatile的含义:防止编译器的优化;它修饰的变量,可能通过第三方(例如用户)修改

6.对变量或寄存器进行位操作

unsigned int a;

a |= (0x1<<3);

a &= ~(0x1 << 3);

7.对一个整型变量的地址赋值,如果该地址是函数,怎样调用该函数?

int *p = (int *)0xaa22;

*p = 0x1122;//或p[0] = 0x1122

*((int *)0xaa22) = 0x1122;

*((void (*)(void))0xaa22)();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值