问题:1.用变量a给出下面的定义(3C科技、宇视科技,神思电子,中安云科,北京凝思软件)
a) 一个整型数: int a;
b) 一个指向整型数的指针: int a, *p; *p=a int *p=&a
c) 一个指向指针的的指针,它指向的指针是指向一个整型数:int **q=*p; int **q=&p
d) 一个有10个整型数的数组:int a[10];
e) 一个指向有 10个整型数数组的指针: int a[10], *p; p=a;
问题:2.在 int a = 3, int *p = &a;中,*p 的值是( ) (华辰泰尔)
A. 变量 a 的地址值;
B. 无意义;
C. 变量 p 的地址值;
D. 3
答案:A
分析:&a就是a的地址值
问题:3.下列定义中,( )是定义了一个指向数组的指针p。(矩阵软件)
A. int(*p)[7]
B. int *p[7]
C. (int *)p[7]
D. int *p[]
答案:A
分析:A为数组指针的正确语法,BCD的p为数组并非指针
问题:4.有以下说明语句,则正确的赋值语句是()。(山大华天)
int a[5][5]; int *p, **q;
A. p = a;
B. q = *a;
C. q = a;
D. p = *a;
答案:AD
分析:p=&a[5][5], p=ap为一级指针,应当指向一维数组,对二维数组a[5][5]加*降维后为一维数组
问题:5.设 char *s1, *s2; 分别指向两个字符串,可以判断字符串 s1 和 s2 是否相等的表达式为( ) (山大华天)
A. s1 = s2
B. s1 == s2
C. strcpy(s1, s2) == 0;
D. strcmp(s1, s2) == 0;
答案:BD
分析:没懂字符串只能用strcmp进行对比
问题:6.求 n 的值。n=__20____。(山东丁一)
int a[20];
char *p1 = (char *)a;
char *p2 = (char *)(a+5);
int n = p2-p1;
5个字节是20
问题:7.若有说明int(*p)[3],以下叙述正确的是( ) (杭州快越科技)
A. p是指针数组
B. (*p)[3]和 *p[3]等价
C. p是指向一维数组中任何一个元素的指针
D. p是指向含有3个整形元素的一维数组的指针
答案:D
分析:[3]代表三个整形元素的一维数组
问题:8.设数组a[5]=(10,20,30,40,50],已知指针p指向a[1],则表达式*++p的值是 ( ) (杭州快越科技)
A. 31 B. 30 C. 21 D. 20
答案:B
分析:p指向a[1], ++p指向a[3], *++p为第三项30
问题:9.有以下程序段,执行后,nul的值为( ) (杭州快越科技)
int a[] = {1, 3, 5, 7, 9};
int nul, *data, x;
nul=1;
data=&a[1];
for(x=0; x<3; x++)
{
nul *= *(data+x);
}
printf("%d\n", nul);
A. 945 B. 315 C. 105 D. 15
答案:C
分析:data是a[1]的地址,3*5*7=105
问题:10.在32位计算机系统上,以下代码的输出结果是什么?(泰华智慧)
int *a;
char *b;
char c[20];
printf("%d, %d, %d", sizeof(a), sizeof(b), sizeof(c));
答案:4, 4, 4
分析:32位系统的地址为4字节
问题: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
答案:A
分析:排除法,c为4, B和D是++前缀,先+再运算,也为4
问题:12.若已定义:int a[6], *p = a, 不能表示 a[1] 地址的表达式是:(云尖软件开发,紫光云数,智洋创新,新华三,石峰)
A. p+1 B. a+1 C. a++ D. ++p
答案:C
分析:没懂a++暂时表达a,之后再++
问题:13.有定义: int x, *p;能使指针变量P指向变量x的语句是:__CB______ (智洋)
A. *p=&x; B. p=&x; C. *p=x; D. p=*&x;
问题:14.若有说明int a=2, *p=&a, *q=p;则以下非法的赋值语句是( AD )。 (智洋)
A. p=q B. *p=*q C. a=*q D. q=a
问题:15.请写出输出结果 (晟安信息)
int main()
{
int a[10] = {0};
int *p = a;
int *q = &n[6];
printf("%d\n", q-p);
printf("%d\n", (int)q - (int)p);
}
答案:q-p=24; (int)q - (int)p = 6
分析:*q为第7项,p为第一项,(0x07-0x01)*4=24; 6
问题: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]);
}
答案:54
分析:i=2, a[2]=4++=5由于是++,输出时不+1,下次运算时才+1
问题:17.数组声明为:short a[3][4],引用第3行第1列的元素写作____A____。(富士安全)
a. **(a+2) b. *(*a+2) c. a[3][1] d. *(a[3]+1)
分析:a+2为第三行,*a+2是第一行第三列
问题:18.指针变量p1和p2类型相同,要使p1,p2指向同一个变量,正确的是____A____。(富士安全)
a. p2=*&p1 b. p2=**p1 c. p2=&p1 d. p2=*p1
分析:*&p1=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
分析:一维数组只能取值一次
问题:20.下面程序的结果是多少? (中科四平)
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问:
p1+5= 0x801005 5(一字节)转16进制 0x801005
p2+5=0x810040 5*8(八字节)
问题: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);
}
答案:1,
问题:22.用 C 语言编程,向内存0xff9527地址上存入一个整型数0x123 (宇视科技)
--、