1. 用变量a给出下面的定义(3 C科技、宇视科技,神思电子,中安云科,北京凝思软件)
a) 一个整型数:
b) 一个指向整型数的指针:
c) 一个指向指针的的指针,它指向的指针是指向一个整型数:
d) 一个有10 个整型数的数组:
e) 一个指向有 10 个整型数数组的指针:
a: int a;
b: int * a;
c: int * * a;
d: int a[ 10 ] ;
e: int ( * a) [ 10 ] ;
2. 在 int a = 3 , int * p = & a; 中,* p 的值是( ) ( 华辰泰尔)
A. 变量 a 的地址值;
B. 无意义;
C. 变量 p 的地址值;
D. 3
A. 变量 a 的地址值;
3. 下列定义中,( ) 是定义了一个指向数组的指针p。( 矩阵软件)
A. int ( * p) [ 7 ]
B. int * p[ 7 ]
C. ( int * ) p[ 7 ]
D. int * p[ ]
A. int ( * p) [ 7 ]
4. 有以下说明语句,则正确的赋值语句是( ) 。( 山大华天)
int a[ 5 ] [ 5 ] ; int * p, * * q;
A. p = a;
B. q = * a;
C. q = a;
D. p = * a;
D. p = * a;
5. 设 char * s1, * s2; 分别指向两个字符串,可以判断字符串 s1 和 s2 是否相等的表达式为( ) ( 山大华天)
A. s1 = s2
B. s1 == s2
C. strcpy ( s1, s2) == 0 ;
D. strcmp ( s1, s2) == 0 ;
D. strcmp ( s1, s2) == 0 ;
6. 求 n 的值。n= ______。( 山东丁一)
int a[ 20 ] ;
char * p1 = ( char * ) a;
char * p2 = ( char * ) ( a+ 5 ) ;
int n = p2- p1;
n= 20
7. 若有说明int ( * p) [ 3 ] ,以下叙述正确的是( ) ( 杭州快越科技)
A. p是指针数组
B. ( * p) [ 3 ] 和 * p[ 3 ] 等价
C. p是指向一维数组中任何一个元素的指针
D. p是指向含有3 个整形元素的一维数组的指针
D. p是指向含有3 个整形元素的一维数组的指针
8. 设数组a[ 5 ] = ( 10 , 20 , 30 , 40 , 50 ] ,已知指针p指向a[ 1 ] ,则表达式* ++ p的值是 ( ) ( 杭州快越科技)
A. 31 B. 30 C. 21 D. 20
B. 30
9. 有以下程序段,执行后,mul的值为( ) ( 杭州快越科技)
int a[ ] = { 1 , 3 , 5 , 7 , 9 } ;
int mul, * data, x;
mul= 1 ;
data= & a[ 1 ] ;
for ( x= 0 ; x< 3 ; x++ )
{
mul *= * ( data+ x) ;
}
printf ( "%d\n" , mul) ;
A. 945 B. 315 C. 105 D. 15
C. 105
10. 在32 位计算机系统上,以下代码的输出结果是什么?( 泰华智慧)
int * a;
char * b;
char c[ 20 ] ;
printf ( "%d, %d, %d" , sizeof ( a) , sizeof ( b) , sizeof ( c) ) ;
4 , 4 , 20
11. 有以下定义:( 华三外协,紫光云数,山东信通电子,新华三,石峰)
int a[ ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } , * p = a
下列哪个表达式的值为3 :( )
A. p += 2 , * ( p++ ) B. p += 2 , * ++ p
C. p += 3 , * p++ D. p += 2 , ++ * p
C. p += 3 , * p++
12. 若已定义:int a[ 6 ] , * p = a, 不能表示 a[ 1 ] 地址的表达式是:( 云尖软件开发,紫光云数,智洋创新,新华三,石峰)
A. p+ 1 B. a+ 1 C. a++ D. ++ p
C. a++
13. 有定义: int x, * p; 能使指针变量P指向变量x的语句是:________ ( 智洋)
A. * p= & x; B. p= & x; C. * p= x; D. p= * & x;
B. p= & x;
14. 若有说明int a= 2 , * p= & a, * q= p; 则以下非法的赋值语句是( ) 。 ( 智洋)
A. p= q B. * p= * q C. a= * q D. q= a
D. q= a
15. 请写出输出结果 ( 晟安信息)
int main ( )
{
int a[ 10 ] = { 0 } ;
int * p = a;
int * q = & a[ 6 ] ;
printf ( "%d\n" , q- p) ;
printf ( "%d\n" , ( int ) q - ( int ) p) ;
}
6
24
16. 下面的程序输出的结果是__________ ( 飞音时代)
# include <stdio.h>
int a[ ] = { 0 , 2 , 4 , 6 , 8 } ;
main ( )
{
int i;
int * p = a;
for ( i = 0 ; i < 4 ; i++ ) a[ i] = * p++ ;
printf ( "%d\n" , a[ 2 ] ) ;
}
4
17. 数组声明为:short a[ 3 ] [ 4 ] ,引用第3 行第1 列的元素写作________。( 富士安全)
a. * * ( a+ 2 ) b. * ( * a+ 2 ) c. a[ 3 ] [ 1 ] d. * ( a[ 3 ] + 1 )
d. * ( a[ 3 ] + 1 )
18. 指针变量p1和p2类型相同,要使p1,p2指向同一个变量,正确的是________。( 富士安全)
a. p2= * & p1 b. p2= * * p1 c. p2= & p1 d. p2= * p1
a. p2= * & p1
19. 下列哪个引用是不正确的? ( 中维世纪)
int a[ 10 ] = { 0. 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } , * p= a;
A. a[ p- a] ; B. * ( & a) C. p; D. * ( * ( a+ i) ) ;
D. * ( * ( a+ i) ) ;
20. 下面程序的结果是多少? ( 中科四平)
p1= ( unsigned char * ) 0x801000 ;
p2= ( unsigned long * ) 0x810000 ;
请问:
p1+ 5 = 0x801005
p2+ 5 = 0x810028
21. 请写出以下程序输出内容。( 小端环境) ( 信雅达)
void main ( )
{
int a[ 4 ] = { 1 , 2 , 3 , 4 } ;
int * p1 = ( int * ) ( & a + 1 ) ;
int * p2 = ( int * ) ( ( char * ) a + 1 ) ;
printf ( "0x%x, 0x%x" , * ( p1- 1 ) , * p2) ;
}
0x4 0x2
22. 用 C 语言编程,向内存0xff9527 地址上存入一个整型数0x123 ( 宇视科技)
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
int main ( int argc, const char * argv[ ] )
{
int * p = ( int * ) 0xff9527 ;
* p = 0x123 ;
printf ( "%d\n" , * p) ;
return 0 ;
}