王道程序员求职宝典阅读笔记20151204

来源:互联网 发布:淘宝上哪家店牛仔裤好 编辑:程序博客网 时间:2024/05/21 11:32

数组篇

1、如下定义是否正确?

int& a[2];错误

int a[2]={1,2};int(&p)[2]=a;正确

知识点:虽然没有引用数组,但是数组可以有引用

2、给出如下代码

int x[4]={0}; int y[4]={1};

数组x和y的值为(B)

A.{0,0,0,0},{1,1,1,1}  B.{0,0,0,0},{0,0,0,0}

C.{0,不确定},{1,不确定}    D.与编译器有关

知识点:数组初始化,对于内置类型数组,若数组定义在函数体外,则元素初始化为0,若定义在函数体内,则无初始化,但是,如果有部分已经初始化,则其余的元素初始化为0。

3、下列(C)是不正确的字符常量?

A.'n'                     B.'V'                  C."a"                          D'\101'

知识点:单引号的'A'为字符常量,仅包含单个字符A,双引号的“A”是字符串常量,包含字符A和空字符(null)

4、下列哪些是C风格字符串

char ca1[]={'C','+','+'};   否

char ca2[]={'C','+','+','\0'};  是

char ca3[]="C++";   是

char *cp1=ca1;   否

char *cp2=ca2;    否

const char *cp="C++";   是

知识点:C风格字符串末尾必须带有一个字符‘\0’,因此为了兼容C语言,C++中所有字符串串常量都由编译器自动在末尾添加一个空字符,因为ca1是一个不带结束符的字符数组,因此明显不是,cp1指向ca1,所以也不是。

5、下列语句正确吗?

char ca[]={'C','+','+'};

cout<<strlen(ca)<<endl;

错误

知识点:C/C++中有很多字符串处理函数(strlen、strcat、strcpy等),传递给这些标准库函数的指针必须具有非零值,并且指向亿null结束的字符数组,在处理C风格字符串的标准库函数时,牢记参数必须以结束符null结束。标准库函数strlen总是假定其参数字符串以null结束,,当调用该标准库函数时,系统将会从实参ca指向的内存空间开始一直搜索结束符,直到恰好遇到null为止。strlen返回这一段内存空间总共有多少字符,不包括null,因此上述代码将无法输出正确的值。printf函数也是遇到空字符‘null’就输出终止的, 因此下列语句char c[5]={'a','b','\0','c','\0'};printf("%s",c);的输出是ab。

6、以下声明是否正确?

int disp(int a[][])

错误

知识点:C++规定,在声明和初始化一个二维数组时,如果对所有的元素都赋值,则第一维(行)可以省略。但注意第二维不能省略,在声明更高维的数组时,也只有第一维可以省略。

7、下列代码输出是什么?

int a[3][2]={(0,1),(2,3),(4,5)};

int *p=a[0];

printf("%d",p[0]);

输出1

知识点:注意此处有陷阱!看清楚了,大括号里不是大括号,而是中括号,于是这个就变成了逗号运算符!逗号运算符的特点就是前面的都不看,只看最后一个表达式,于是0,2,4,都没什么用了,这个就等价于int a[3][2]={1,3,5}。为了对逗号运算符有更深的理解,再举例如下:int b=2,c=7,d=5 int a1,a2;a1=(++b,c--,d+3);a2=++b,c--,d+3;这里a1=8,a2=4。由逗号运算符的自左向右结合可知a1=8,因赋值运算符优先级高于逗号运算符,因此a2等于b++,因为b经历两次自加,因此值为4。

8、int a[2][2][3]={{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}};

for(int i=0;i<12;i++);

cout<<;

请问cout语句后面如何填写能顺序输出?

参考答案是a[i/6][i/3%2][i%3];

我的答案是*((int*)a+i);

知识点:因为不管是几维数组,在内存中都是顺序存储,因此肯定都能顺序输出,只要将行号和列号与输出的顺序对应正确就行。因此有了参加答案,我的答案的解释是,因为a本是int*[2][3]类型的,指向数组首元素(首元素是int[2][3]形式的)地址,将其强制转化为int*,则就指向第一个整数值地址了(和首元素地址是一样的),那么顺序+1则可顺序输出。



0 0
原创粉丝点击