这个show函数其实就是对double数组的每一个元素,用field_width作为宽度参数打印。
show(array, count, 12);
就是对array的每一个元素,用%12lf的方式打印。
具体解释如下:
void show(double array[], size_t array_size, unsigned int field_width)
{
char format[10] = "%"; //这段定义怎么理解?
// format将作为“格式串”传入printf。在printf里的格式串一开头一般都是“%”吧。
char width_str[4];
size_t i = 0;
size_t j = 1;
do
{
width_str[i++] = '0'+field_width%10;
}while((field_width /= 10) != 0);
// 将field_width逆序保存到width_str字符串中。比如int的12就变成字符串"21"。
// 到这里为止format字符串是"%"
do
{
format[j++] = width_str[--i];
}while(i>0);
format[j] = '\0';
// 这里从尾到头奖width_str一个字节一个字节复制到format的末尾(也就是开头那个%的末尾)
// 到这里为止format字符串变成了"%12"
strcat(format, "lf"); //这段代码中strcat怎么理解?
// strcat能将第二个字符串接到第一个字符串末尾
// 现在format字符串变成了"%12lf"
for(j = 0 ; j{
if(j%5 == 0)
printf("\n");
printf(format, array[j]); //这段代码中printf怎么理解?
// 这里将array数组的每一个元素,用"%12lf"的格式打印到控制台。
// "%12lf"就是打印的时候占据12个字符,要打印的array[i]位数不够,则在左边补空格。
}
}
C语言的一个特色就是程序能生成字符串,而字符串又能控制程序运行。
还有其他问题请追问。