秒,在解答这个C语言题目上,我们都败了

看这篇文章之前,我觉得可以先看看下面这篇文章 

看printk引发的一点思考

不管我们用的printk还是printf,它们的核心都是可变参数的函数,所以可以拼接很多参数传递给函数实体,然后函数实体里面可以通过某种方式解析这些参数。

看看这个题目

过滤一组数据,要求过滤之后头尾部都没有',' ,而且也不能用if 语句来实现。

例如、 输入:a[6]={1,2,3,4,5,6} 输出:1,2,3,4,5,6

使用if 实现之

正常的写法是用到 if 的,已经背离了题目的要求。

不过,我说下自己对这个问题的看法,我们在做项目做需求的时候,产品经理每天拿着刀在后面威逼利诱着,已经是火烧眉毛的事情,能做出对方想要的要求已经是不易了,哪里有时间去思考那些浮夸的写法。

这也是做科研和做项目的不同,我写文章,做分享,是怀着深耕去的,但是做项目,我们是需要把控时间节点的,每个人站在不同的角度,就会看到不同的哈姆雷特。

#include<stdio.h>int 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.h>int 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.h>int strput(char * str)
{printf("%s\n",str);
}int main()
{strput("Linux"+1);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

微信扫描二维码,关注我的公众号 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为C++程序添加文件保存加载功能

一、引子为什么要浪费时间去设计一个算法来实现数据的文件存储还要费劲地调试代码呢&#xff1f;Boost库可以为你做这些事情。借助于串行化模板&#xff0c;你可以容易地把数据存储到你自己定制格式的文件中。本文将教给你如何轻松地存储数据并回读数据。二、概述当你开发一个软…

[Uva10641]Barisal Stadium(区间dp)

题意:按照顺时针给出操场的周边点&#xff0c;然后给出周围可以建设照明灯的位置&#xff0c;以及在该位置建设照明灯的代价&#xff0c;照明灯照射的范围与操场的边界相切&#xff0c;现在要求一个最小的花费&#xff0c;要求操场的所有边都被照射到。 解题关键&#xff1a;预…

常用c语言代码大全,C语言的一些常用代码

C语言经常需要发明各种轮子&#xff0c;为方便以后能够把精力放在应用逻辑上而不在发明轮子上&#xff0c;把一些常用的代码片段列于此。首先是字符串处理方面的&#xff0c;strcpy 函数容易越界&#xff0c;习惯使用 strncpy 函数&#xff0c;但此函数只管复制最多 n 个字符&a…

Linux kernel 同步机制(下篇)

之前的文章Linux kernel同步机制在上一部分&#xff0c;我们讨论了最基本常见的几类同步机制&#xff0c;这一部分我们将讨论相对复杂的几种同步机制&#xff0c;尤其是读写信号量和RCU&#xff0c;在操作系统内核中有相当广泛的应用。读写信号量&#xff08;rw_semaphore&…

白话设计模式——Abstract Factory

Abstract Factory&#xff0c;把英文直接翻译过来的话就是“抽象工厂”&#xff0c;既然是工厂&#xff0c;那就肯定是生产产品的地方。不过&#xff0c;它不是生产同一类的产品&#xff0c;而是生产同一系列的产品。举个例子&#xff0c;广州本田现在生产3种汽车&#xff0c;O…

c语言程序设计工资纳税系统流程图,c语言程序设计,纳税工资系统.doc

c语言程序设计,纳税工资系统c语言程序设计,纳税工资系统第一章 课程设计目的和要求1.1 课程设计的目的C语言一直是程序设计语言的主流之一数据类型丰富、齐全。C供了整数、实数、字符、字符串等基本数据类型&#xff0c;还提供数组、指针、结构体等构造数据类型运算符丰富、齐全…

工程师实战:单片机裸机程序框架是怎样炼成的?

前言 前不久&#xff0c;我有位做测试的朋友转去做开发的工作&#xff0c;面试遇到了一个问题&#xff0c;他没明白&#xff0c;打电话问了我。题目大概就是&#xff1a;在单片机裸机开发时&#xff0c;单片机要处理多个任务&#xff0c;此时你的程序框架是怎样的呢&#xff1f…

c 语言指针教学视频,[C语言] 猎豹网校 C和指针视频教程

资源介绍21days_Cpp_二进制和十六进制.mp4xa0xa080x86_内联汇编.mp4xa0xa0ABG2C_for_循环.mp4xa0xa0ABG2C_关系运算符.mp4xa0xa0ABG2C_字符串.mp4xa0xa0ABG2C_循环.mp4xa0xa0ABG2C_数学运算.mp4xa0xa0ABG2C_更高级的运算符.mp4xa0xa0ABG2C_测试多个值.mp4xa0xa0ABG2C_终止循环.…

此处为本人自勉自留地!

本人自97年从师范学院毕业&#xff0c;整整8年的青春献给了自己所事业!前一段&#xff0c;遇到一些人和事&#xff0c;对我有些触动!找了一块自留地&#xff0c;写些东西进行自勉!也许我将有一个全新的开始&#xff0c;也许还是走以前的老路!希望是自己的&#xff0c;结果也是自…

Oracle shared server模式连接ORA-12519

设置了shared server连接&#xff0c;dispatcher进程和shared server进程都没有问题listener.ora文件配置如下&#xff1a;LSNR2 (DESCRIPTION (ADDRESS_LIST (ADDRESS(PROTOCOLtcp)(HOSTedbjr2p1.example.com)(PORT1526)) ))SID_LIST_LSNR2 (SID_LIST (SID_…

图解http

今天是周五&#xff0c;按照正常的情况&#xff0c;今天下班后将会经历一周中最愉快的时光&#xff0c;愉快的时间总是会有那么一些短暂&#xff0c;所以我就送给大家一个资料 「图解http」这是一个微信好友发给我的&#xff0c;他一直给我发送了很多很多消息&#xff0c;比如什…

17种正则表达式

"^\d$"  //非负整数&#xff08;正整数 0&#xff09;"^[0-9]*[1-9][0-9]*$"  //正整数"^((-\d)|(0))$"  //非正整数&#xff08;负整数 0&#xff09;"^-[0-9]*[1-9][0-9]*$"  //负整数"^-?\d$"    //整数&…

为什么执行自己的程序要在前面加./

前言在Linux中&#xff0c;我们执行内置命令时&#xff0c;直接输入命令名称即可&#xff0c;如&#xff1a;$ mv a b #将a重命名为b而在执行自己写好的程序时&#xff0c;却要带上./&#xff0c;例如&#xff1a;$ hello hello: command not found $ ./hello hello world这是为…

break lab c语言,C语言实验lab10.doc

C语言实验lab10C程序设计实验报告学院&#xff1a;国际商学院班级&#xff1a;14电商专业&#xff1a;电子商务姓名&#xff1a;熊靓男日期&#xff1a;15.5.25学号&#xff1a;1420070049实验目的复习一维数组掌握二维数组参数的传递掌握排序算法实验内容消灭怪物在阳光明媚月…

C语言怎么计算数据类型范围?

之前在网上看到的一个讨论&#xff0c;是谁决定了数据类型的范围&#xff1f;比如说&#xff0c;怎么确定 char 就是 -128~127 &#xff0c;而不是 -127~128 呢&#xff1f;说下规定signed 的取值范围是 -(2N-1) to 2N-1 - 1unsigned 的取值范围是 0 to (2N-1) (2N-1 - 1)只要…

双十一为何规则复杂,套路多多

为啥不直接打5折?为了让你把“穷人”俩字写到自己脸上啊。 双十一快到了&#xff0c;今年我又一次有了不太想参加的感觉。作为一个阅读理解不太灵光的人&#xff0c;去年的活动我就整得不太明白——优惠券都是十块十块的&#xff0c;也不知道该咋用;还有预付款、整点秒杀之类的…

出去转了一圈

以前一直不知道市场啊&#xff0c;销售啊什么的到底是怎么回事&#xff0c;今天下午跟着公司的市场总监出去转了一圈&#xff0c;算是有了点感谢认识。现在&#xff0c;伴着柔柔的jazz&#xff0c;写点东西。今下午的风很大&#xff0c;温度也很底&#xff0c;应该说是我来北京…

c语言程序设计顺序结构题目,C语言编程 顺序结构编程练习题目

C语言顺序结构编程练习题目C语言编程 顺序结构题目题目1计算摄氏温度 输入一个华氏温度&#xff0c;要求输出摄氏温度。公式为&#xff1a;C5/9(F-32)&#xff0c;输出要有文字说明&#xff0c;取2位小数。式中&#xff1a;C表示摄氏温度&#xff0c;F表示华氏温度题目2 一辆汽…

团建是什么鬼?

2012年我入职TCL&#xff0c;在TCL我体会到了团队建设的文化&#xff0c;也正是经历了那段职场&#xff0c;我明白了很多「可意味不可言传」。那时候我们经常五十成群出去吃饭、喝酒、唱歌&#xff1b;上学那会我很不喜欢团队活动&#xff0c;特别是室内的活动&#xff0c;总感…

Alpha 答辩总结

【Alpha展示评审表格】 小组序号小组名称格式&#xff08;20%&#xff09;内容&#xff08;20%&#xff09;PPT&#xff08;20%&#xff09;演讲&#xff08;20%&#xff09;答辩&#xff08;20%&#xff09;总分1天机组1515151516762PMS1617171616824“像我这么能打的还有五个…