C 语言新手十诫.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 语言新手十诫

C 语言新手十诫 一、你不可以使用尚未给予适当初值的变量。 错误例子: int accumulate(int max) /* 从 1 累加到 max,传回结果 */ { int sum; /* 未给予初值的区域变量,其内容值是垃圾 */ int num; for (num = 1; num = max; num++) { sum += num; } return sum; } 正确例子: int accumulate(int max) { int sum = 0; /* 正确的赋予适当的初值 */ int num; for (num = 1; num = max; num++) { sum += num; } return sum; } 二、你不可以存取超过Array既定范围的空间。 错误例子: int str[5]; int i; for (i = 0; i = 5; i++) str = i; 正确例子: int str[5]; int i; for (i = 0; i 5; i++) str = i; 说明:宣告阵列时,所给的阵列元素个数值如果是 N, 那麽我们在後面 透过 [索引值] 存取其元素时,所能使用的索引值范围是从 0 到 N-1, 也就是 C 和 C++ 的阵列元素是从第 0 个开始算起,最後一个元素的 索引值是 N-1, 不是 N。 C/C++ 为了执行效率,并不会自动检查阵列索引值是否超过阵列边界, 我们要自己写程序来确保不会越界。一旦越界,将导致无法预期的後果。 三、你不可以提取(dereference)不知指向何方的指针(包含 null 指针)。 错误例子: char *pc1; /* 未给予初值,不知指向何方 */ char *pc2 = 0; /* pc2 起始化为 null pointer */ *pc1 = a; /* 将 a 写到不知何方,错误 */ *pc2 = b; /* 将 b 写到「位址0」,错误 */ 正确例子: char c; /* c 的内容尚未起始化 */ char *pc1 = c; /* pc1 指向字符变量 c */ /* 动态分配 10 个 char(其值未定),并将第一个char的位址赋值给 pc2 */ char *pc2 = (char *)malloc(10); *pc1 = a; /* c 的内容变为 a */ pc2[0] = b; /* 动态配置来的第 0 个字符,内容变为 b /* 最後记得 free() 掉 malloc() 所分配的空间 */ free(pc2); 说明:指针变量必需先指向某个明确的东西(object),才能进行操作。 四、你不可以将字串常数赋值(assign)给 char* 变量, 然後透过该变量改写字串的内容(只能读不能写)。 错误例子: char* pc = john; *pc = J; printf(Hello, %s\n, pc); 正确例子: char pc[] = john; *pc = J; /* 或 pc[0] = J; */ printf(Hello, %s\n, pc); 说明:字串常数的内容是唯读的。上面的错误例子,是将其内容所在的位址赋 值给字元指标 pc, 我们透过指标只可以去读该字串常数的内容,而不应该做 写入的动作。而正确例子,则是另外宣告一个独立的字元阵列,它的大小我们 未明文指定([]),编译器会自动将其设为刚好可以容纳後面的字串常数起始 值的大小,包括字串後面隐含的 \0 字元,并将字串常数的内容复制到字元 阵列中,因此可以自由的对该字元阵列的内容进行读和写。 错误例子(2): char *s1 = Hello, ; char *s2 = world!; /* strcat() 不会另行配置空间,只会将资料附加到 s1 所指唯读字串的後面, 造成写入到程式无权碰触

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档