20_02_12笔记——《你必须知道的495个C语言问题》

《你必须知道的495个C语言问题》笔记
4.3 *p++自增p还是p所指向的变量?
a:++优先级高于(星号),p++和(p++)等价,他自增p并返回p自增前所指向的值。

4.4 C语言中的指针算术总是自动地采纳它所指向的对象的大小,所以访问的时候不需要使用+sizeof(类型)的方法。

4.5 我有一个char*型指针碰巧指向一些int型变量,我想跳过他们,为什么((int *)p)++;这样的代码不行?
a:显然作为一个右值,当然不行,因为赋给左值的是自增之前的值,可用:
p=(char *)((int *)p+1);
注:转成int *型以后,加1,还需要转成int *。

4.8 C语言中,函数是通过值传递的,当需要传入指针的地址时,用双重指针。

4.9 函数extern int f(int *);,它接受指向int型指针。,怎样传入一个常量?调用f(&5)似乎不行。
a:C99中,用复合字面量
f((int[ ]){5});
C99之前必须先定义一个临时变量,然后把他的地址传给函数。
注:复合字面量,一种语法,如:int a[1] = {5},就相当于(int [1]){5} (数组大小可以省略)。

4.11 C语言可以“按引用传参”吗?
a:没有。当向函数传入数组时,编译器本质上在模拟按引用传参,但不是真正的按引用传参。

4.12 函数总是通过指针调用的,所有“真正的”函数名在表达式和初始化中,总是隐式地退化为指针。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值