C++进阶②:#define与typedef、函数返回数组指针怎么写、各类型+1移动的字节数、位运算

1 #define与typedef

define是直接替换

#define a(x, y) x + y
cout << a(3, 5) * a(3, 5) << endl;
// 3 + 5 * 3 + 5 = 23

#define a(x, y) (x+y)
cout << a(3, 5) * a(3, 5) << endl;
// (3 + 5) * (3 + 5) = 64

typedef:类型别名

typedef double* p;
cout << typeid(p).name() << endl; / p是double *类型
typedefconst是修饰p的,而非修饰p所指的对象。              
const p ptr = 0; / ptr是double * const类型,是指向double的常量指针。
const p *a; / a是一个指针,所指对象是“指向double的常量指针”

typedef void ( * sighandler_t)(int)
这句话的含义:sighandler_t表示函数指针类型(指向函数的指针),函数返回值为void,参数为int类型。

捕捉信号函数中:参数handler和返回值都是这个类型。
sighandler_t signal(int signum, sighandler_t handler);

typedef void (*sighandler_t)(int)

2 函数返回数组指针怎么写

①使用类型别名

typedef int arrT[10]; /array是一个类型别名,表示的类型是含有10个整数的数组,arrT相当于int [10]
using arrT = int[10]; /arrT的等价声明,同第一条
arrT* func(int i);  /func返回一个指向含有10个整数的数组的指针

②普通表示法

int arr[10];
int (*p)[10] = &arr; /p是指向含有10个整数的数组的指针
int (*(func (int i)) [10]; /函数func的返回类型是“指向含有10个整数的数组的指针”
Primer P205

③尾置返回类型 C++11
任何函数定义都可以使用尾置类型返回,但是这种形式对于返回类型比较复杂的函数最有效,比如返回类型是数组的指针或引用。 注意要在原位置放置auto

auto func(int i) -> int (*) [10];

④使用decltype

int odd[] = {1,3,5,7,9};
decltype(odd) *func(int i); /decltype的结果是一个长度为5int数组,加一个*表示该函数返回值是“指向含有5个整数的数组的指针”

3 char每次移动1个字节;short移动2个字节 ;int , long ,float移动4个字节 ;double移动8个字节

在这里插入图片描述
p1指向字符型,一次移动一个字符型,1个字节;p1+5后移5个字节,16进制表示为5;
p2指向长整型,一次移动一个长整型,4个字节,p2+5后移20字节,16进制表示为14。

在这里插入图片描述

对字符串进行sizeof操作的时候,会把字符串的结束符"\0"计算进去的,进行strlen操作求字符串的长度的时候,不计算\0的。
数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。

在这里插入图片描述
该题的关键是要认清楚强制类型转换后指针的类型。
p的类型为char *,p++后p指向str数组的第2个元素即字母“l”的位置。
p1的类型为int *,p1++后p1指向的位置增加4个字节,指向str数组中的第6个元素即字母“t”的位置。

4 位运算

位运算规则及常用实例
注意&运算的优先级比 << >> 低

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值