集锦一:
#include <stdio.h>
int array[]={23,34,12,17,204,99,16};
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
int main()
{
int d=-1;
int x;
if(d <= TOTAL_ELEMENTS-2)
printf("Hello World.\n");
system("pause");
return 0;
}
TOTAL_ELEMENTS所定义的值是unsigned int 类型,因为sizeof()的返回类型是无符号数。if语句在signed int 和unsigned int之间测试相等性,d被升级为unsigned int 类型。
集锦二:
#define SWAP(a,b) (a=a+b,b=a-b,a=a-b)
宏不使用中间变量,交换两个变量的值,在什么情况下此宏存在问题?
答案:
例如我们有如下需求,将数组a[0.....n-1]中值交换a[0]<---> a[n-1],在此种应用下会出现与预期不符的情况。SWAP(a[i],a[j]),恰好i==j成立时,会将该数组对应位置上的值置为0.
集锦三:
分析如下程序的执行结果,并解释原因.
#include <stdio.h>
#include <stdlib.h>
void hello(void)
{
fprintf(stderr,'hello!\n');
}
void func(void)
{
void *buf[10];
static int i;
for(i=0;i<100;i++)
{
buf[i]=hello;
}
}
int main()
{
int buf[1000];
func();
return 0;
}
集锦四:C语言实现进度条功能
#include <stdio.h>
#include <unistd.h>
int main()
{
int i;
for(i=0;i<=100;i+=10)
{
printf("Percent completed:%3d%%\r",i);
sleep(1);
fflush(stdout);
}
}