网站 优点,怎么加入电商,网站建设移动端官网,建设工程查询系统看这篇文章之前#xff0c;我觉得可以先看看下面这篇文章 看printk引发的一点思考不管我们用的printk还是printf#xff0c;它们的核心都是可变参数的函数#xff0c;所以可以拼接很多参数传递给函数实体#xff0c;然后函数实体里面可以通过某种方式解析这些参数。看看这个… 看这篇文章之前我觉得可以先看看下面这篇文章 看printk引发的一点思考不管我们用的printk还是printf它们的核心都是可变参数的函数所以可以拼接很多参数传递给函数实体然后函数实体里面可以通过某种方式解析这些参数。看看这个题目过滤一组数据要求过滤之后头尾部都没有, 而且也不能用if 语句来实现。例如、 输入a[6]{1,2,3,4,5,6} 输出1,2,3,4,5,6使用if 实现之正常的写法是用到 if 的已经背离了题目的要求。不过我说下自己对这个问题的看法我们在做项目做需求的时候产品经理每天拿着刀在后面威逼利诱着已经是火烧眉毛的事情能做出对方想要的要求已经是不易了哪里有时间去思考那些浮夸的写法。这也是做科研和做项目的不同我写文章做分享是怀着深耕去的但是做项目我们是需要把控时间节点的每个人站在不同的角度就会看到不同的哈姆雷特。#includestdio.hint main()
{int arr[6] {1,2,3,4,5,6};int is_first 1;int i 0; for(i 0; i 6; i){if(is_first){printf(%d,arr[i]);is_first 0;}else {printf(,%d,arr[i]);}}return 0;
}
大神的写法这代码来源于知乎的一个题主他在回答中分享了这个写法非常巧妙。#include stdio.h
int main(void) {int a[6] {1, 2, 3, 4, 5, 6}, i;for (i 0; i 6; i) {printf(,%d !i, a[i]);}return 0;
}
https://www.zhihu.com/question/412135686/answer/1396323238先不解释我们看看printf函数原型typedef char *va_list;#define _AUPBND (sizeof (acpi_native_int) - 1)
#define _ADNBND (sizeof (acpi_native_int) - 1)#define _bnd(X, bnd) (((sizeof (X)) (bnd)) (~(bnd)))
#define va_arg(ap, T) (*(T *)(((ap) (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
#define va_end(ap) (void) 0
#define va_start(ap, A) (void) ((ap) (((char *) (A)) (_bnd (A,_AUPBND))))//start.c
static char sprint_buf[1024];
int printf(char *fmt, ...)
{va_list args;int n;va_start(args, fmt);n vsprintf(sprint_buf, fmt, args);va_end(args);write(stdout, sprint_buf, n);return n;
}
里面的几个宏作用我在之前的文章里面也有有提到。关于va_list 我写了一个实例比较简单#include stdlib.h
#include stdio.h
#include string.h#include stdarg.hint sum(int size, ...)
{va_list vp;int s 0;int i 0;va_start(vp, size);for (i 0; i size; i) {s va_arg(vp, int);printf(%d\n, s);}va_end(vp);printf(%d,%d\n, size, s);
}int main()
{sum(5, 20, 30, 40, 50, 20);return 0;
}
输出20
50
90
140
160
5,160--------------------------------
Process exited after 0.08141 seconds with return value 0
请按任意键继续. . .
跟上面例子不同之处在于printf 函数传入的是字符串既然是字符串那就离不开指针「地址」既然是指针就离不开指针的指向位置这个问题。先举个例子#include stdio.hint strput(char * str)
{printf(%s\n,str);
}int main()
{strput(Linux1);return 0;
}
输出inux--------------------------------
Process exited after 0.08051 seconds with return value 0
请按任意键继续. . .
如果能明白上面的问题这个例子的话拿对前面那个代码再拿过来瞧瞧应该就会有一种豁然开朗的感觉了。#include stdio.h
int main(void) {int a[6] {1, 2, 3, 4, 5, 6}, i;for (i 0; i 6; i) {printf(,%d !i, a[i]);}return 0;
}
首先,%d !i
是一个字符串的地址这个地址 通过 i 来对它进行了偏移。如果是第一个数组i 对应的值是 0所以就不会打印出 「 , 」这个字符了。 推荐阅读 专辑|Linux文章汇总 专辑|程序人生 专辑|C语言嵌入式Linux微信扫描二维码关注我的公众号