int(*n)[10]; 是数组指针 sizeof(n)=4
int* n[10]; 是指针数组 sizeof(n)=40
数组指针 ,只要是指针就4个字节。
n先与* 结合,所以,n是一个指针,既然是一个指针,而且是在32位操作系统下,那么n就占32位,4个字节。
C内核解析指针:指针数组实质是一个数组,数组内元素全部是指针变量; 数组指针实质是一个指针,该指针指向一个数组; 区分两者,
若核心和星号*结合,表示核心是指针如int (*n)[10];
若核心和中括号[]结合,表示核心是数组,如 int p[10];
若核心和小括号结合,表示核心是函数,如int q();
遇到操作符优先级问题,看优先级高低,其中()、[ ]、->优先级高于
故,这里sizeof(n):4
竟然错了呜呜呜
*(b+i)
和
*(b[i]+j)
是一个套路,只不过第二个b【i】事先访问了一维,再来一次就是二维
参考答案中的解释: *b+i为b[0][i],取地址加j相当于b[j][i]❌❌❌
正确应该是:相当于先访问了 b 中0行 i列的元素后在给元素 + j
重写伴随着继承,但是私有成员函数在继承后不可见,所以不能被重写 ???
(a++)返回值也是 3
SUB(a++,++b) = (a++)++b = (3++)++4 = 3*5 = 15
第一级:
圆括号【()】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】
第二级:
逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++ –】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*和&】、长度运算符【sizeof】
乘法运算符【*】、除法运算符【/】、取余运算符【%】
加法运算符【+】、减法运算符【-】
左移动运算符【<<】、右移动运算符【>>】
关系运算符【< > <= >= 】
等于运算符【==】、不等于运算符【!=】
按位与、或(&、^、|)
逻辑运算符 与、或(&&、||)
条件运算符【?:】
赋值运算符【= += -= *= /= %= >>= <<.= &= |= ^=】
简练
()> !(单目运算符) > 算术运算符(加减乘除自增等等) > 移位运算符(左移右移)> 关系运算符(>=、!=) > 逻辑运算符(&、|、&& 、 ||) >条件运算符【?:】> 赋值运算符(【= += -= *= /= %= >>= <<.= &= |= ^=】)
作者:lpplgg
链接:https://www.nowcoder.com/exam/test/71983008/submission?pid=51693538&pageSource=testHistory
来源:牛客网
C语言中的强制类型转换(Type Cast)有显式和隐式两种,显式一般就是直接用小括号强制转换,TYPE b = (TYPE)a; 隐式就是直接 float b = 0.5; int a = b; 这样隐式截断(by the way 这样隐式的截断是向 0 取整的,我喜欢这么叫因为 0.9 会变成 0,1.9 变成 1,-0.9 变成 0,-1.9 变成 -1)。
C++对C兼容,所以上述方式的类型转换是可以的,但是有时候会有问题,所以推荐使用C++中的四个强制类型转换的关键字:
1、static_cast,2、const_cast,3、reinterpret_cast,4、dynamic_cast
Const_cast:把const变量转换成非const。
Static_cast:用于各种隐式转换,比如非const转const,void*转指针等。
static_cast 是“静态转换”的意思,也就是在编译期间转换,转换失败的话会抛出一个编译错误。
Dynamic_cast:用于动态转换。只能用于含有虚函数的类向上或向下转换,比如父类转子类,子类转父类。
Reinterpret_cast:几乎什么都可以转,但是可能出问题,不推荐使用。
为什么不用C的强制转换?
C的强制转换,转化不明确,不能错误检查,容易出错。
原文链接:https://blog.csdn.net/qq_42328339/article/details/101445258
原文链接
C++语言中的确规定了空结构体和空类所占内存大小为1(讲究预留?若结构体为空,其大小为1;若不为空,结构体的存储比较复杂,需要考虑内存存储的字节对齐。==需要考虑内存存储的字节对齐==厉害了这个!),而C语言中空类和空结构体占用的大小是0。
因为+是双目运算符,但是函数里只传了一个参数,就必然使用了this指针,那就肯定不是友元函数了
因为友元函数没有当前对象,因此要定义单目运算符,就需要单参函数,要定义双目运算符,就需要双参函数;
定义后置“++"或后置“–"运算是特例,它们是单目运算符,但需要两个形参,头一个形参是作用对象,后一个是int形参;
用友元函数可以定义成员函数不能实现的运算,例如一些双目运算符,右操作数是本类对象,而左操作数不是本类对象;
成员函数体中,当前对象作为一个操作数,无形参形式可以定义单目运算符
作者:Geng1995
链接:https://www.nowcoder.com/exam/test/72063274/submission