EazyChange

导航

 

1.执行下述程序的输出结果是:

#include 
char b[]="ABCDEF"; 
main() 
{ 
char *bp; 
for (bp=b;*bp;bp+=2) 
printf("%s",bp); 
printf("\n"); 
} 

结果是:ABCDEFCDEFEF。

这道题考基础。b[]是个数组,bp是个指针。for循环的意义是:bp初始为数组首地址,每次循环地址增加2。什么时候循环挺呢?

*bp为真时,即*bp的值不为0时。所以第一次循环输出ABCDEF,第二次输出CDEF,第三次EF,此时*bp=‘\0’。循环结束。

 

2.若定义了char ch[]={″abc\0def″},*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……,其实跟里面的\0并么有关系。再提一下:如果%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;
}
posted on 2016-02-10 10:10  EazyChange  阅读(404)  评论(0编辑  收藏  举报