指针数组:实际上是数组,其元素都是指针;如:int *p[3];
数组指针:实际是指针,指向数组。如:int (*p)[3]:指向数组的指针,该数组有3个int型数据。
【】的优先级要比 * 高 ,同时int *p[3] 等价于 int *(p[3])
nt *p[4] 与选择项中的 说明 () 等价,
正确答案: C 你的答案: D (错误)
int p[4]
int *p
int *(p[4])
int (*p)[4]
基类 | |||
继承方式 | public | protected | private |
public | public | protected | 不可继承 |
private | private | private | 不可继承 |
protected | protected | protected | 不可继承 |
基类的公有成员是其私有派生类的( )成员
正确答案: B 你的答案: D (错误)
不可见
私有
保护
公有
空格处应填写()。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
正确答案: D 你的答案: D
s.p = 5
s->p = 5
s.*p = 5
*s.p = 5
.的运算符优先级比*要高,*s.p=*(s.p)。
B、C看起来似乎很对,但他们的调用对象必须是类对象的指针,而不能是类对象。
以下程序运行后的输出结果是( )
int main()
{
int a=1,b=2,m=0,n=0,k;
k=(n=b<a)&&(m=a) ;
printf("%d,%d\n",k,m);
return 0;
}
正确答案: A 你的答案: A
0,0
0,1
1,0
1,1
考察逻辑运算符的短路特性,m=a在本例中不会执行!
下面程序的输出结果是( )
1 2 3 4 5 6 7 8 9 |
|
正确答案: D 你的答案: D
1,5
1,6
2,4
2,5
intArray:是数组的首地址,
&intArray:就是存放这个数组首地址的地址,可用int (*)[5]的指针保存,
&intArray+1:相当于int (*)[5]这个指针的指针偏移,偏移量是指向元素的大小*1,(比如double *p,p+1的偏移量就是一个double的大小*1)
(int *)(&intArray+1):相当于把偏移后的地址(也是一个int[5])强转给p保存;
以下能对二维数组a进行正确初始化的语句是()。
正确答案: B 你的答案: D
int a[2][ ]={{1,0,1},{5,2,3}};
int a[ ][3]={{1,2,3},{4,5,6}};
int a[2][4]={{1,2,3},{4,5},{6}};
int a[ ][3]={{1,0,1},{},{1,1}};
定义二维数组并赋初值时,可以省略第一维的大小,但不能省略第二维的大
小,所以A是错误的;
对于C来说,定义的数组a是2行4列的数组,但赋初值却包含了
3行,所以是错误的;
D中初值列表中有一行是空的,这在C语言中是不允许的,所以也
是错误的;
B定义了2行3列的二维数组并对其赋初值,是正确的,所以正确答案是B.
设已有定义:char*st="how are you”;,下列程序段中正确的是()。
正确答案: A 你的答案: D
char a[11],*p;strcpy(p=a+1,&st[4]);
char a[11];strcpy(++a,st);
char a[11];strcpy(a,st);
char a[ ],*p;strcpy(p=a[1],st+2);
a是数组名,是一地址常量,++a是非法的,所以答案B错误;
因为数组a的大小为11,执行strcpy(a,st);,st字符串的结尾符’\0’无法存放到数组a中,所以答案C也是
错误的;
答案D中定义数组a时未指定大小,所以也是错误的;
对于答案A来说,执行strcpy(p=a+1,&st[4]);,首先将数组a的第二个元素a[1]的地址赋给指针变量p,然后将st第5个
元素开始直到字符串结束为止的字符复制到p所指向的内存单元中,所以选择答案是A。
下面程序的输出结果是( )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
正确答案: A 你的答案: A
false,false,true
false,false,false
true,true,true
false,true,true
#include<iostream>
using
namespace
std;
int
main(
void
)
{
char
str1[] =
"hello world"
;
//存放在栈中的数组
char
str2[] =
"hello world"
;
//存放在栈中的数组
const
char
str3[] =
"hello world"
;
//存放在栈中的字符串常量
const
char
str4[] =
"hello world"
;
//存放在栈中的字符串常量
const
char
* pstring1 =
"hello world"
;
//本身在栈中,指向常量的指针
const
char
* pstring2 =
"hello world"
;
//本身在栈中,指向常量的指针 //显然二者所指向的地址一致
int
x = (
int
)pstring1;
int
y = (
int
)pstring2;
//为了方便打印出指针所指向的地址
cout << boolalpha << ( str1==str2 ) << endl;
//比较字串首地址 flase
cout << boolalpha << ( str3==str4 ) << endl;
//比较字串首地址 flase
cout << boolalpha << ( pstring1==pstring2 ) <<endl;
//比较指针所指地址 true
cout <<
"str1="
<< &str1 <<
","
;
cout <<
"str2="
<< &str2 << endl;
cout <<
"str3="
<< &str3 <<
","
;
cout <<
"str4="
<< &str4 << endl;
cout <<
"pstring1="
<< &pstring1 <<
","
;
cout <<
"pstring2="
<< &pstring2 << endl;
//输出指针本身地址
cout<<hex;
cout <<
"pstring1="
<< x <<
","
;
cout<<hex;
cout <<
"pstring2="
<< y << endl;
//16进制输出指针所指地址
return
0;
}