C语言之编译器引出问题.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言之编译器引出的问题 基本解 本节主要探讨C编译器下面两方面的特点所引发的一系列常见的编程问题。 对C文件 C程序通常由几个小程序(.c文件) 对函数的参数和返回值建立临时变量 C编译器会对函数的参数建立临时参数,也可能会对函数的返回值隐含传递一个指针。因为这些临时变量的隐含性存在,使得在某些情况下,特别是有指针存在的时候,会引发一系列的问题。 C文件中所包含的C语言一同编译 C语言中被包含的头文件是和.c文件一起映到.c文件的   C文件的分   我有一个数a定f1.c中,但是我想在f2.c中sizeof可以达到    答案与分析:   答案是否定的,你没有sizeof操作符只是在“compile time)”起作用,而C.c文件sizeof可以确定同一个源文件中某个数“运行run time)”才能确定的事情了。   一件事情要想做,   1)、定.c文件中我^_^)。   2)、在某个.h文件中用宏定#define ARRAY_SIZE 50,然后在两个源文件中都包含.h文件,通ARRAY_SIZE来得到定.c文件中的数   3)、如0,-1,NULL等,然后我      下面的代? struct list {  char *item;  struct list *next; } main (argc, argv) {  ... }   答案与分析:   原因很简单,稍微注意一点不难发现,在定义结构list的右花括弧后面加一个分号就可以解决 struct list {  char *item;  struct list *next; };//缺了这个分号可不行!   好了,问题是解决了,但,你知道这个错误究竟导致了什么致命问题吗?问题不是表面上那么简单的,OK,   首先看一看下面这段代码: VOID Func ( struct my_struct stX) {  ....... } struct my_struct stY = {...}; Func (stY);   当调用函数Func的stY的FUNC的,C语言的参数值传递。我相信这个你一定很清楚,那么,你应该知道:如果函数的返回值是结构变量的话,函数应该如何将值返回给调用者呢?且看下面 struct my_structFunc (VOID) {  ....... } struct my_struct stY = Func();   此Func的返回“神秘指”),而C语言的编译器作为一个隐藏参数传递给函数Func。当函数Func返回stY中,从而完成将   你明白了上述所   因struct list {...}的定main (argc, argv)被argc和argv以外的第三个参数,也就是我“神秘指”。可是,大家知道,main函数,main函数的参数是由程序中的启startup code)提供的。而启main()天生就“神秘指”,当然没有,如此一来, main()在返回   建    1)、尽量将函数调用时内存拷贝的开销可不小,尤其是对那些调用频繁、结构体大的情况。    2)、 问题:编译器会给函数的参数隐含制造临时副本   Test函数会有什 void GetMemory2(char **p, int num) {  *p = (char *)malloc(num); } void Test(void) {  char *str = NULL;  GetMemory(str, 100);  strcpy(str, hello);  printf(str); }   答案与分析:   C/C++高      1)、能hello   2)、内存泄漏    另一个相   Test函数会有什 void GetMemory(char *p) {  p = (char *)malloc(100); } void Test(void) {  char *str = NULL;  GetMemory(str);  strcpy(str, hello world);  printf(str); }   答案与分析:   后果GetMemory后,Test函数中的 str仍旧是NULL。可想而知,一调用 strcpy(str, hello world);   程序必然崩溃了事。   原因分析:    Cp的副本是 _p, _p = p。如果函数体内的程序修改了_p的内容,就p的内容作相_p申_p所指的内存地址改p丝毫未变。所以函数GetMemory并不能   .c文件一同   下面的代 #include someheader.h int myint = 0;

您可能关注的文档

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档