- 已知int x = 5;执行下列语句后,x的值为
- x+=x-=x*x
先算x-=x*x,得x=5-5*5,x=-20;再算x+=x;得出x=40
- 请问下列代码的输出结果是什么?
- int m[] = {1,2,3,4,5,6,7,8,9,0};
int(*p)[4] = (int(*)[4])m;
printf("%d",p[1][2]);
指针数组和数组指针的区别
int *p[4] 和int (*p)[4]的区别
int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。
int (*p)[4]; //定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。
区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
int *p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组。
int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。
1、int (*p)[4]:定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型);
2、(int (*)[4])m:表示将m强制转换为大小为4的数组指针;
1、int (*p)[4]:表示行指针,单位移动量为4个int类型。即p+1,则一次移动4个int类型
2、(int (*)[4])m:表示以数组指针类型组织m,每4个为一个数组
3、这样一来,m为{{1,2,3,4},{5,6,7,8},{9,0, , }},p指向第一行
4、故p[1][2]即*(*(p+1)+2),表示第二行第三个元素,为7
Class A;
Class B;
void F(){
A a;
B b;
}
在函数F中,本地变量a和b的构造函数和析构函数的调用顺序是:
a 构造,b构造,b析构,a析构
按变量声明顺序构造对象,然后入栈
按相反顺序出栈,析构对象。
类的私有成员只能被类中的成员函数访问,任何类以外的函数对它们的方位都是非法的
这句话说法是错误的
友元函数可以访问
运算符等级
括号成员第一; // ()和 .
全体单目第二; // ++ -- +(正) -(负) * &
乘除余三 // * / %
加减四 // + -
位移五 // >> <<
关系六 // > < >= <=
等于不等排第七 // == !=
位与异或和位或三分天下 *** 十 //& ^ | 逻辑或跟与十二和十一 // || &&
条件高于赋值
逗号运算符最低
选择编程风格良好的条件比较语句
A.假设布尔变量名字为fag,它与零值比较的标准if语句如下。
第一种1 if (flag = TRUE)
2 if (flag = FALSE第二种:
1 if (flag)
2 if(!flag)B.假设整型变量的名字为 value,它与零值比较的标准i语句如下。
第一种:
1 if (value = 0)
2 if (value 1=0)
第二种1 if (value)
2 if (!value)C.假设浮点变量的名字为x,它与0.0的比较如下.
第一种:
if(x==0.0)
if(xl=0.0)
第二种:
1 if ((x >=-EPSINON )&&(X <= EPSINON))
2 if((x <-EPSINON)II(X> EPSINON)
其中, EPSINON是允许的误差(精度).D.指针变量p与0的比较如下.
第一种:
1 if(p=NULL)
2 if(p!= NULL)
第二种:
1if(p==0)
2 if(p !=0)解析
A 的第二种风格较良好.根据布尔类型的语义,零值为"假"(记为 FALSE),任何非零值都是"真"(记为TRUE).TRUE的值究竟是什么并没有统一的标准例如Ⅴisual C++将TRUE定义为1,而Ⅴisual basic则将TRUE定义为-1.因此不可将布尔变量直接与TRUE、 FALSE进行比较.
B 的第一种风格较良好,第二种风格会让人误解 value是布尔变量,应该将整型变量用"=="或"!="直接与0比较.
C 的第二种风格较良好.注意:无论是foat还是 double类型的变量,都有精度限制.所以一定要避免将浮点变量用"="或"!="与数字比较,应该设法转化成">="或"<="形式.
D 的第一种风格较良好,指针变量的零值是"空"(记为NULL).尽管NULL的值与0相同,但是两者意义不同.用p与NUL显式比较,强调p是指针变量.如用p与0比较,容易让人误解p是整型变量.