1.执行下述程序的输出结果是:
#include char b[]="ABCDEF"; main() { char *bp; for (bp=b;*bp;bp+=2) printf("%s",bp); printf(" "); }
结果是:ABCDEFCDEFEF。
这道题考基础。b[]是个数组,bp是个指针。for循环的意义是:bp初始为数组首地址,每次循环地址增加2。什么时候循环挺呢?
*bp为真时,即*bp的值不为0时。所以第一次循环输出ABCDEF,第二次输出CDEF,第三次EF,此时*bp=‘ ’。循环结束。
2.若定义了char ch[]={″abc def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是
A.def
B.d
C.e
D.0
参考答案:C
首先,分清楚*p+4和*(p+4)。这是不一样的,运算符优先级,()在*之前。即*p+4是*P的值基础上+4,*(p+4)是p地址+4再取地址指向的值。
所以输出其实是a+4即e。其实这道题比较巧数组是abc……,其实跟里面的 并么有关系。再提一下:如果%s就要p,如果%c就要*p。
3.不使用新变量,交换两个数据:
我写两种方法:
(1)
int main() { int i = 5, j = 2; i = j - i; j = j - i; i = j + i; return 0; }
(2)
void fun(int* i, int* j) { *i = *j - *i; *j = *j - *i; *i = *j + *i; } int main() { int i = 5, j = 2; fun(&i, &j); printf("i=%d,j=%d", i, j); return 0; }