哪里有va_list的详细介绍或书籍?

-

网上好多资料都只是简单介绍了那四个宏,介绍不全面深入。貌似,在32位和64位下va_list的类型是不一样的,不同平台环境下也是有差异的?va_list结构体内四个参数是什么意思?怎么对他们进行操作?等等。这些知识在常见的那些c语言书上都找不到,请前辈指点。

谢邀,看例子写几行代码试试,就四个宏还找书?
好比git还有大块头的动物书,傻子们的钱真好赚啊,要知道linus花了2周就把git的代码给写出来

C / C++ C 编程 C++11 C 程序设计 C/C++

C语言中主函数 int main()和 void main()的区别?

-

两个都不是标准的C语言主函数写法
首先来看看标准的主函数写法是什么样的,在C99标准(ISO/IEC 9899:1999)的5.1.2.2.1 Program startup一节是这么描述的:

The function called at program startup is namedmain. The implementation declares no
prototype for this function. It shall be defined with a return type ofintand with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here asargcandargv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;or in some other implementation-defined manner.
也就是上面黑体的两种写法算是标准的主函数写法。
因为main要返回给调用者一个值,所以void main是肯定不行的,即使编译通过了,编译器也会返回给系统一个值然后报一个warning。
至于int main(),虽然明确了返回值,但是参数列表却是空的,在C语言里面跟C++有个区别就是对于参数列表为空的时候,C++表示这个函数没有参数,而C语言却表示这个函数可以传任意参数。所以在C语言里面当一个函数不需要参数的时候都要明确加上void

C(编程语言) C 编程 C 语言入门

【C语言新手字符数组赋值问题】字符串数组赋值给另外一个字符串数组后内部储存情况?

-

None

chan[30] 和 tran[30] 都未初始化,所以一开始两个数组里面都是30个垃圾字节。
gets() 的时候比如你输入了10个字母,那么chan[] 里就是10个字母 + '\0' + 19个垃圾字节。
进入for循环,10次循环给 tran[] 的前10个字节填上了内容,然后循环遇到 '\0' 终止,所以此时 tran[] 里面是 10个字母 + 20个垃圾字节。
我想你知道问题所在了吧?

C(编程语言) C / C++ C 编程 C 语言入门 C语言函数

自学编程遇到解决不了的问题,知乎大神们去哪求帮助?

-

本人测绘狗一枚,现正在自学c语言,前几天自己编了一个程序,碰到一个bug,解决不了,因为本人专业限制,还有同学的水平也不高,一直无法解决,很是苦恼。想问问知乎的大神,这时候该去哪呢求得帮助。谢了。

谢邀。我刚学的时候也没人教,虽然是CS专业的,所以就把报错信息粘到百度里,发现在CSDN论坛或者大神写的blog里都有人遇到过了,再琢磨琢磨,就行了。
现在我基本上使用Google,stackoverflow上一般有人问过类似的,没有的话自己在上面提问,一般都能得到解答。

武汉大学 计算机科学 测绘 C 编程 遥感

Android Framework开发转入通信芯片物理层开发(主要用C)有哪些挑战以及该如何应对?

-

之前在做Android Framework的开发,现在进入转行进入LTE物理层的开发测试工作,感觉很多不适应。

我跟你正好相反,之前modem搞了段时间,现在转android framework。

就我的经验,首先对嵌入式系统要有一定的认识,内存管理,系统调度这些基本的东西要补上。特别是内存管理,这个java开发基本不用关注的;系统调度部分就是整个基带各个层次任务优先级的划分和处理,一般越往下优先级越高;

然后是负责对应模块3GPP规范一定要多读,并结合code看,刚开始可能很枯燥;

最后就是 log的完善,modem 没有完善的log基本不可能debug,相信你也会有体会。

手机上随便写点东西…

C(编程语言) 联发科 (MTK) 芯片 芯片(集成电路) Android C 编程

首先得说我是才学c的,但是我这个在visual c++输出的结果与在c4droid输出结果不一样?

-

#include
void main()
{int x,y,z,i;
i=3;
x=(++i)+(i++)+(++i); /*i=6,x=15*/
y=(i++)+(i++)+(i++); /*i=9,y=18*/
z=(++i)+(++i)+(++i); /*i=12,z=36*/
printf("x=%d\n",x);
printf("y=%d\n",y);
printf("z=%d\n",z);
}

书上是这么写的:
“在C中,编译器可以选择先计算函数里哪个参数的值。这个自由提高了编译器的效率,但如果在函数参数里使用了增量运算符就会带来麻烦。
编译器可能不以您想象的顺序来操作。您可能认为编译器应该先找到XXX,然后继续进行;但是它可能先做最后的项目,即先增加XX的值,然后在XXX中使用新值。这些都是没有保证的。”

书中的建议是:
“1. 如果一个变量出现在同一个函数的多个参数中时,不要将增量或者减量运算符用于它上面。
2. 当一个变量多次出现在一个表达式里时,不要将增量或减量运算符运用到它上面。”

——《C primer plus》(第5版)中文版

C(编程语言) C 编程 C 语言入门 C (编程语言) 初学

怎么学好编程,表示C语言好难,完全听不懂,求助攻。☺?

-

在百度上搜:中国大学MOOC;
打开之后,找到一个文本输入框;
输入:c;
再找到:程序设计入门 c;
点进去;
选择你要学习的课时;
就会播放视频;
一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看一直看

再学不会就别玩电脑了;;;;;;

C(编程语言) C / C++ C 编程 C 语言入门 C 语言的科学与艺术(The Art and Science of C) (书籍)

c语言中不知道数组长度的情况下,怎么申请空间?

-

用指针的话,malloc也是要先开辟一个确定的空间,比如malloc(sizeof(int)*100)。那如果我只用到10个,申请了100个不是浪费吗,如果用到200个,不是不够用吗。我是想首先先开辟一个int的内存,然后如果又来了一个数据,我自己在接下去的内存再开一个存数据。这个能实现吗??

很多情况下,是可以大致判断出需要多大容量的。


当不知道长度时,你需要的数据结构,叫动态变长数组。下文简称为动态数组。也就是C++中的std::vector。


动态数组的通常定义为

struct array
{
    size_t capacity;
    size_t size;
    char* buf;
};

这里存放的是char类型,存其它类型同样原理。


其中,capacity表示容量,size表示实际有多少个数据。buf表示指向具体的内存。当capacity 为4,size为3时,这时再放一个char,还够容量放。之后capacity和size都变为4。


这时再需要放一个char, 就已经放不下了。就需要重新分配一个更大的内存区间。并且将之前的数据复制到新空间,再释放掉旧的内存空间。通常的策略是将容量翻倍,从4扩大成8。


这个分配新空间,复制数据,释放旧空间的过程,可以用函数realloc完成。假如在当前位置上还可以扩大容量,realloc就直接在原地扩大内存空间,避免了复制数据的开销。


将动态数组这个数据结构封装好。外面就不用再关心具体的内存分配过程了,可以一直往里面放数据。


扩大capacity的策略通常是翻倍。逐渐升上去

1 2 4 8 16 32 64 128 256 512 1024

而很多情况下,是可以估计到一个最终容量的粗略值的(不用太准确)。动态数组通常初始化时候,会有一个叫初始容量值的参数。这样传进去一个估计值,可以大大减少它重新分配空间的次数。


动态数组可算是最简单,又最常用的数据结构了。它可以保证内存的连续性,假如你放的数据不用连续,并且常常从中间插入和删除,你就需要链表了。

C(编程语言) C 编程 指针 C指针

用c语言写一个航班查询系统?

-

下面的表格给出了一个城市到另一个城市的每日航班信息。

航班号 起飞时间 抵达时间
CX001 8:00 a.m. 10:16 a.m.
CX002 9:43 a.m. 11:52a.m.
CX003 11:19 a.m. 1:31 p.m.
CX004 12:47 p.m. 3:00 p.m.
CX005 2:00 p.m. 4:08 p.m.
CX006 3:45p.m. 5:55p.m.
CX007 7:00 p.m. 9:20 p.m.
CX008 9:45 p.m. 11:58 p.m.
按下面基本要求编写程序:

1)航班信息存放在文件中。

2)要求用户输入一个时间(用24小时的时分表示)。程序选择起飞时间与用户输入最接近的航班,
显示出相应的航班号、起飞时间和抵达时间。
用c语言写一个航班查询系统。

我是C语言课程的助教,我已经记下你的名字了。

C 编程

《C程序设计语言》(TCPL)这本书的过人之处在哪里?

-

The C Programming Language
Dennis M. Ritchie
Brian W. Kernighan

1)为什么这是 “圣经” 级的 C 语言书,好在哪
2)如何更好地阅读它

圣经级的书看作者名字就可以知道。K&R。 Dennis Ritchie,连Ken Thompson写unix时对c的了解都来自于他的传授(虽然Dennis在模块化代码执行效率上无情的欺骗了Ken)。c语言的设计者所写的书,理应算是圣经。其次,这本书只有两百多页,足够简洁明了,大量冗余内容是不能被称为经典的。
关于阅读它,最好是逐字逐句,如果语言没有障碍的话,还是读原文较好。

编程语言 C 编程

全局变量赋初值是在编译时进行的吗?

-

都知道对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。那么对于全局变量呢?同属于静态变量的全局变量是怎样的呢?
其实我问这个是想知道:在芯片里,代码会被循环运行无数次,那么全局变量会被重复赋初值吗?定义它的那段代码会重复执行吗?还是不执行让它沿用上一次的值?

是在main函数被执行之前进行的,只赋值一次

C(编程语言) 单片机 DSP C / C++ C 编程

用c这一个helloworld程序,怎么能生成在任何电脑都可以执行的exe文件?

-

比如说用vs,或者codeblocks;或者如果拷贝一个文件夹到另一台电脑的话,需要拷贝哪些东西?还有一些绿色软件是怎么生成的?好奇

题主大概不知道世界上还有linux和mac,它们和windows的exe是不兼容的
如果你指的是windows,那么两种方法,第一种使用静态链接,生成只需要windows系统dll的程序,第二种,你发布程序的时候要求对方安装对应版本的动态库,或者你的程序附带需要的动态库

C(编程语言) C / C++ C 编程 C/C++

C语言未定义行为都有什么,未定义形成的原因?不懂汇编,请别使用汇编只是来回答。

-

由C语言代码输出结果求分析:为什么x!=15的结果是1 ? - C 语言入门

1.
没有办法一一列举出C语言的无定义行为(undefined behavior),凡是C语言没明确规定结果的代码都是无定义行为。你所能做的只能是努力了解C语言究竟定义了什么——精确地知道而不是似是而非地一知半解,尤其切忌想当然,然后按照C语言已经明确定义了的东西去写代码。
2.
汇编不能用来解释C语言,C语言也不需要用汇编来解释,用汇编解释C语言的都是不懂装懂的半吊子

C(编程语言) C 编程

© COPYRIGHT BY i How And Why.com 2015