- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言使用中常见问题
C语言使用中的常见问题
我们在C语言的学习和使用过程中经常犯一些小错误或者有很大的疑问,今天特把这些常见问题总结如下,以飨读者。
1. 始化问题
int a[100]={0};能否将数组中所有的元素初试化为零?
答案是肯定的。因为在为数组初始化的时候,若作者提供的初始化元素个数小于数组长度,系统自动会将其余元素的值定为0。像例子中,初始化时作者只提供了一个元素0给了a,还有99个元素作者没有给出初始值。这时按照上面的规则系统会自动将剩余元素的初始值定为0。以此我们可以得到数组中所有元素初始化为0的结果。
但我们不提倡这样的做法。一般初始化可以用for循环来实现。
例:Int I,a[10];
For(I=0;I<10;I++)
Scanf(%d,a[I]);
2. “文件包含”处理的两种形式的差异
C语言提供了#include命令来实现“文件包含”的操作。
其一般形式为:①#includestdio.h
②#include<stdio.h>
程序运行的时候,①首先在用户当前目录中寻找要包含的文件,若找不到再按标准方式在相对路径下找stdio.h,找不到再到path里面找,而②系统到存放c库函数头文件所在的目录中寻找索要包含的文件,这是标准形式。
一般说,若为调用库函数而用#include命令来包含相关的头文件,则用②形式以节省时间。若要包含的使用使用户自己编写的文件,一般用①形式。若文件不在当前目录中,①内可以给出文件路径。
3. 宏使用问题
宏替换一般在编译前,所以没有分配任何的空间,没有任何的类型可言,同时它是直接替换宏标号,所以使用一定要小心。例如:#definef(x)x*x
main( )
{int i;
i= f(2+3);
printf(%d\n,i);
}
输出结果是11而不是25,因为它只是简单替换,替换的结果是2+3×2+3,所以输出结果是11而不是25。
有些人过分地喜欢用宏,其实宏的使用也不是越多越好,要防止代码的膨胀,现在的操作系统基本都是页式管理,当宏替换内容过大发生换页时,宏的效率不会比调用函数快,还好c++ inline解决了这个问题。
4. 空函数
void f();
void f(void);
void f(...);
通常我理解的空有如下三种形式,它们的含义分别是:
第一个函数的参数列表不是为空(C++里面是空),它的参数是不确定。
第二个函数参数才为空。
第三个函数是可变参数函数,很多库函数都是这样实现的,如:典型的printf(...)。
5. C语言中的参数值的传递
C语言里面只有值传递,即实参的值传给形参(单向传递)。那么有些人会问,那为什么用数组名或数组元素作函数参数的时候我们可以实现形参的值传递给实参呢?
那是因为一般变量做函数参数时,形参在调用时系统要为他分配存储空间,实参与形参各自占用自己的存储空间,实参的值再复制给形参。数组名或数组元素作函数参数时,在进行存贮空间的分配时,不再为形参另外分配存储空间了,实参与形参共占用同一空间。其实它本质上也是值传递,即形参的值传给形参,只是传的实参的地址而不是参变量的值而已。
6. 数组越界问题
C语言为了追求最大的灵活和效率,不对数组进行边界检查,这些工作都是程序员自己的事情,不要以为你一越界编译器就会告诉你,只有当越界到编译器需要换页的时候才会报错。在理想情况下,Window下可以越界64K,不过很不幸,我试过很多次,最多达到了30k。不过这个数字也是很恐怖的,30k的汇编代码足以对你的操作系统做任何事情。
7. 数组和指针
首先必须要搞清楚一个问题,数组是数组,指针是指针,它们不是一回事。
int a[100];
int *p ;
a数组名代表数组的地址值是个常量,它不能够被改变,而p是可以的。
看看sizeof(a) = 100 和sizeof(p) = 4(vc6.0)
对于字符串还要看看sizeof和strlen的区别:
sizeof还是数组的大小,strlen以0结束(不包括0)。大家一定要注意,因为不注意出现问题,你都不知道怎么回事。
如:
void f( char * p )
{
if ( p == NULL )
{
return ;
}
char *t ;
int lenOfP =
您可能关注的文档
最近下载
- 13.劳动者之歌(课件)-2024冀美版美术六年级上册.pptx
- 思想道德与法治参考复习试题含答案.doc VIP
- L21ZJ118 真空绝热板外墙保温系统建筑构造.pdf VIP
- 陕2020TJ050- STP 建筑用真空绝热板保温系统构造图集.pdf VIP
- 徕卡TCA操作说明培训.docx
- 项目监理部管理制度范文.pdf VIP
- DB22_T 3650-2024 柞蚕术语DB22_T 3650-2024 柞蚕术语.pdf VIP
- 2025 离婚协议书【打印版】.pdf VIP
- DB33校园安全管理规范.pdf VIP
- DB31_T 310007-2021 DB33_T 310007-2021 DB32_T 310007-2021 DB34_T 310007-2021 设备泄漏挥发性有机物排放控制技术规范.docx VIP
原创力文档


文档评论(0)