测试对静态变量声明及定义疑问同时,给出itoa函数(把整数转换为字符串)的实现。
#include<stdio.h>
#include<math.h>
#define MAXSIZE 100
char s[MAXSIZE];
void itoa1(int n, char s[])//该程序仅供测试静态声明,无法将负数正确转换
{
//起初思想:若为负数,则初次声明后,之后的声明定义语句可能直接跳过,就能实现对负数的转换。
if(n < 0)
{
n = -n;
s[0] = '-';
static int i = 1; // #1 c不允许重复声明定义,但可以在条件语句中加入,且初次声明定义后之后的声明语句当作赋值语句运行。
}
if(n/10 > 0)
itoa1(n / 10, s);
static int i = 0; // #2 n为负数时,该语句当作:i = 0;而非经初次声明定义后直接跳过。
s[i++] = n % 10 + '0';
s[i] = '\0';
}
void itoa2(int n, char s[])//能转换,但不能处理最大负数的情况。
{
static int i = 0;
if(n < 0)
{
n = -n;
s[i++] = '-';
}
if(n/10 > 0)
itoa2(n / 10, s);
s[i++] = n % 10 + '0';
s[i] = '\0';
}
void itoa3(int n, char s[])//nb
{
static int i;
if(n / 10)
itoa3(n / 10, s);
else
{
i = 0;
if(n < 0)
s[i++] = '-';
}
s[i++] = abs(n % 10) + '0';
s[i] = '\0';
}
int main()
{
int num = -2147483648;
itoa3(num, s);
printf("%s", s, s[10]);
return 0;
}
参考书目《the c program language》