cpp-week_one-错题整理
cpp-week_one-错题整理
2-14.以下哪个定义中的p
不是指针,请选择恰当的选项:
A.char **p;
B.char (*p)[10];
C.char *p[6];
D.给出的三项中,p
都是指针
**p
- 先将
*p
看成是一个整体(内容是指向p的指针),设为t,则*t
是指向t的指针,所以**p的意思是指向(指向p的指针)的指针
char (*p)[10]
- ()的优先级最高,意味着p和*先形成了指针,而[10](以10个元素)是指针p所指向的内容,char表明了[10]元素的数据类型。
- 数组指针:指向数组的指针
char *p[6]
- []的优先级高于*,故p会与[10]先结合形成数组,而char * 规定了数组p的每个元素的数据类型为字符型的指针
- 指针数组:存放指针的数组,数组里每一元素才是指针,这种数组是指针的集合
2-16.若有说明: char *language[]={“FORTRAN”,“BASIC”,“PASCAL”,“JAVA”,“C”}; 则以下不正确的叙述是 ( )。
A.language+2表示字符串"PASCAL"的首地址
B.*language[2]的值是字符P
C.language是一个字符型指针数组,它包含5个元素,每个元素是一个指向字符串变量的指针
D.language是一个字符型指针数组,它包含5个元素,其初值分别j : "FORTRAN","BASIC","PASCAL","JAVA","C"
B.*language[2]的值是字符P
-
language先和[2]结合找到PASCAL,在对PASCAL进行*操作,得到PASCAL的首字母。
-
#include<bits/stdc++.h> using namespace std; int main() { char *language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"}; cout<<language<<" "<<*language<<endl; cout<<language+1<<" "<<*(language+1)<<endl; cout<<language+2<<" "<<*(language+2)<<endl; cout<<language+3<<" "<<*(language+3)<<endl; cout<<language+4<<" "<<*(language+4)<<endl; cout<<language[2]<<endl; cout<<*language[2]<<endl; cout<<*(language[2]+1)<<endl; return 0; }
D.选DOG?
2-54.设有下面的程序段:char s[]="china";char *p=s;则下列叙述正确的是____。
A.数组s中的内容和指针变量p中的内容相等
B.s和p完全相同
C.s数组长度和p所指向的字符串长度相等
D.*p与s[0]相等
答:答案:D
A:s是字符数组,p是指向字符串的指针
B:显然数组s中的内容和指针变量p中的内容不相等,应该换一种说法“数组s中的内容和指针变量p所指向的字符串的内容相等”
- 指针变量p中的内容,存放的是地址?
C:s数组的长度为6(包含结束符’\0’),p所指向的字符串长度为5
D:*p=‘c’,s[0]=‘c’
追问
p所指向的字符串长度为啥是5呢?它不识别’\0’吗?
追答
'\0’不计入字符串总长度