超级经典计算机二级C语言陷阱考试题
超级经典计算机二级C语言陷阱考试题
若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___d___.
a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j
以下正确的程序段是_________.
a)char str[20]; b)char *p;
scanf("%s",&str); scanf("%s",p);
c)char str[20]; d)char str[20],*p=str;
scanf("%s",&str[2]); scanf("%s",p[2]);
下面程序的运行结果是_______.
#include
#include
fun(char *w,int n)
{char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1
}
main()
{
char p[] = “1234567”;
fun(p,strlen(p));
puts(p);
}
a)7654321 b)1714171 c)1711717 d)7177171
下面程序段的运行结果是__ hELLO!______.
char s[80],*sp="HELLO!";
sp=strcpy(s,sp);
s[0]='h';
puts(sp);
.下面程序段的运行结果是__ef_____.
char str[]="abc\0def\0ghi",*p=str;
printf("%s",p+5);
设有如下定义:int x = 1, y = -1;,则语句:printf(“%d\n”, (x--&++y));的输出结果是: B
1
0
-1
2
设有如下定义:int a, b;,则语句:printf("%d", (a = 5) && (b = -1));的输出结果是: A
1
5
-1
不确定
程序执行后的输出结果是int i, n = 0;
for (i = 2; i < 7; i++) {
do {
if (i % 3) {
continue;
}
--n;
} while(!i);
n++;
}
printf("n = %d\n", n);
以下代码,哪一句是非法的?____最后一句s.p[0] = 2;____
struct po_s
{
int i;
int *p;
};
int main(void)
{
struct po_s s;
int *p;
p = &s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
return 0;
以下代码,输出什么?____a3, BB(注意大小写)____
int a[5] = {0x1a,0xa3,0xd3,0xe4,0xbb};
int *ptr;
ptr = (int *)(&a + 1);
printf("%x, %X", *(a + 1), *(ptr - 1));
下面的代码输出是什么,为什么?
void foo(void) { unsigned int a = 0x10;
int b = -20;
(a + b > 6) ? puts("> 6") : puts("<= 6"); }#define PS struct po_s*typedef struct po_s* PS_t;
这两个语句是将PS 和 PS_t 作为一个指向结构po_s指针。typedef更好。
因为如下代码
PS p1, p2; PS_t p3, p4;
p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。
下面两段代码一样吗?为什么?
int square(volatile int *ptr) { int a, b; a = *ptr; b = *ptr;