当前位置: 首页 > news >正文

制作网站的公司注册资本要多少深圳市官网网站建设报价

制作网站的公司注册资本要多少,深圳市官网网站建设报价,想做运营怎么入手,网站建设怎么进行一级域名申请函数参数的传递问题#xff08;一级指针和二级指针#xff09; [转]原以为自己对指针掌握了#xff0c;却还是对这个问题不太明白。请教#xff01; 程序1#xff1a; void myMalloc(char *s) //我想在函数中分配内存,再返回 { s(char *) malloc(100); } void … 函数参数的传递问题一级指针和二级指针 [转] 原以为自己对指针掌握了却还是对这个问题不太明白。请教   程序1   void  myMalloc(char  *s)  //我想在函数中分配内存,再返回   {        s(char  *)  malloc(100);   }     void  main()   {        char  *pNULL;        myMalloc(p);    //这里的p实际还是NULL,p的值没有改变为什么        if(p)  free(p);   }   程序2void  myMalloc(char  **s)   {        *s(char  *)  malloc(100);   }     void  main()   {        char  *pNULL;        myMalloc(p);    //这里的p可以得到正确的值了        if(p)  free(p);   }   程序3   #includestdio.h     void  fun(int  *p)   {          int  b100;          pb;   }     main()   {          int  a10;          int  *q;          qa;          printf(%d/n,*q);          fun(q);          printf(%d/n,*q);          return  0;   }   结果为   10   10   程序4   #includestdio.h     void  fun(int  *p)   {          *p100;   }     main()   {          int  a10;          int  *q;          qa;          printf(%d/n,*q);          fun(q);          printf(%d/n,*q);          return  0;   }   结果为   10   100   为什么           ---------------------------------------------------------------     1.被分配内存的是行参sp没有分配内存   2.被分配内存的是行参s指向的指针p所以分配了内存   ---------------------------------------------------------------     不是指针没明白是函数调用的问题看看这段     7.4指针参数是如何传递内存的              如果函数的参数是一个指针不要指望用该指针去申请动态内存。示例7-4-1中Test函数的语句GetMemory(str,  200)并没有使str获得期望的内存str依旧是NULL为什么     void  GetMemory(char  *p,  int  num)   {              p    (char  *)malloc(sizeof(char)  *  num);   }   void  Test(void)   {              char  *str    NULL;              GetMemory(str,  100);            //  str  仍然为  NULL                          strcpy(str,  hello;            //  运行错误   }   示例7-4-1  试图用指针参数申请动态内存     毛病出在函数GetMemory中。编译器总是要为函数的每个参数制作临时副本指针参数p的副本是  _p编译器使  _p    p。如果函数体内的程序修改了_p的内容就导致参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中_p申请了新的内存只是把_p所指的内存地址改变了但是p丝毫未变。所以函数GetMemory并不能输出任何东西。事实上每执行一次GetMemory就会泄露一块内存因为没有用free释放内存。   如果非得要用指针参数去申请内存那么应该改用“指向指针的指针”见示例7-4-2。     void  GetMemory2(char  **p,  int  num)   {              *p    (char  *)malloc(sizeof(char)  *  num);   }   void  Test2(void)   {              char  *str    NULL;              GetMemory2(str,  100);            //  注意参数是  str而不是str              strcpy(str,  hello;                          cout  str    endl;              free(str);               }   示例7-4-2用指向指针的指针申请动态内存     由于“指向指针的指针”这个概念不容易理解我们可以用函数返回值来传递动态内存。这种方法更加简单见示例7-4-3。     char  *GetMemory3(int  num)   {              char  *p    (char  *)malloc(sizeof(char)  *  num);              return  p;   }   void  Test3(void)   {              char  *str    NULL;              str    GetMemory3(100);                          strcpy(str,  hello;              cout  str    endl;              free(str);               }   示例7-4-3  用函数返回值来传递动态内存     用函数返回值来传递动态内存这种方法虽然好用但是常常有人把return语句用错了。这里强调不要用return语句返回指向“栈内存”的指针因为该内存在函数结束时自动消亡见示例7-4-4。     char  *GetString(void)   {              char  p[]    hello  world;              return  p;            //  编译器将提出警告   }   void  Test4(void)   {   char  *str    NULL;   str    GetString();            //  str  的内容是垃圾   cout  str    endl;   }   示例7-4-4  return语句返回指向“栈内存”的指针     用调试器逐步跟踪Test4发现执行str    GetString语句后str不再是NULL指针但是str的内容不是“hello  world”而是垃圾。   如果把示例7-4-4改写成示例7-4-5会怎么样     char  *GetString2(void)   {              char  *p    hello  world;              return  p;   }   void  Test5(void)   {              char  *str    NULL;              str    GetString2();              cout  str    endl;   }   示例7-4-5  return语句返回常量字符串     函数Test5运行虽然不会出错但是函数GetString2的设计概念却是错误的。因为GetString2内的“hello  world”是常量字符串位于静态存储区它在程序生命期内恒定不变。无论什么时候调用GetString2它返回的始终是同一个“只读”的内存块。     ---------------------------------------------------------------     看看林锐的《高质量的C/C编程》呀上面讲得很清楚的   ---------------------------------------------------------------     对于1和2   如果传入的是一级指针S的话   那么函数中将使用的是S的拷贝   要改变S的值只能传入指向S的指针即二级指针     ---------------------------------------------------------------     程序1   void  myMalloc(char  *s)  //我想在函数中分配内存,再返回   {        s(char  *)  malloc(100);  //  s是值参  函数返回后就回复传递前的数值无法带回分配的结果   }   这个和调用  void  func  (int  i)  {i1;};  一样退出函数体i指复原的     程序2void  myMalloc(char  **s)   {        *s(char  *)  malloc(100);  //  这个是可以的   }   等价于   void  int  func(int  *  pI)  {*pI1;}  pI指针不变指针指向的数据内容是变化的   值参本身不变但是值参指向的内存的内容发生了变化。     程序3   void  fun(int  *p)   {          int  b100;          pb;                  //  等同于第一个问题  b的地址并没有被返回   }     程序4     void  fun(int  *p)   {          *p100;    //  okay   }           ---------------------------------------------------------------     其实楼主的问题和指针没有多大关系就是行参和值参的问题     函数调用的时候值参传递的是数值是不会返回的   这个数值在函数体内部相当于一个变量是可以改变但是这个改变是无法带出函数体外部的     ---------------------------------------------------------------     程序1   void  myMalloc(char  *s)  //我想在函数中分配内存,再返回   {        s(char  *)  malloc(100);//传过来的是P所指的地址,并不是P的地址,所以改变S不会改变P   }     void  main()   {        char  *pNULL;        myMalloc(p);    //这里的p实际还是NULL,p的值没有改变为什么        if(p)  free(p);   }   程序2void  myMalloc(char  **s)   {        *s(char  *)  malloc(100);//S指向的是P的地址,所以改变了P所指的内存单元.   }     void  main()   {        char  *pNULL;        myMalloc(p);    //这里的p可以得到正确的值了        if(p)  free(p);   }   程序3   #includestdio.h     void  fun(int  *p)   {          int  b100;          pb;   }     main()   {          int  a10;          int  *q;          qa;          printf(%d/n,*q);          fun(q);道理同第一个程序.          printf(%d/n,*q);          return  0;   }   结果为   10   10   程序4   #includestdio.h     void  fun(int  *p)   {          *p100;//参数P和实参P所指的内存单元是相同的.所以改变了参数P的内存单元内容,就改变了实参                        //的内存单元内容   }     main()   {          int  a10;          int  *q;          qa;          printf(%d/n,*q);          fun(q);          printf(%d/n,*q);          return  0;   }   结果为   10   100   为什么   ---------------------------------------------------------------     void  main()   {        char  *pNULL;        myMalloc(p);    //这里的p实际还是NULL,p的值没有改变为什么        if(p)  free(p);   }       void  myMalloc(char  *s)  //我想在函数中分配内存,再返回   {        s(char  *)  malloc(100);   }     myMalloc(p)的执行过程:   分配一个临时变量char  *ss的值等于p也就是NULL但是s占用的是与p不同的内存空间。此后函数的执行与p一点关系都没有了只是用p的值来初始化s。   然后s(char  *)  malloc(100)把s的值赋成malloc的地址对p的值没有任何影响。p的值还是NULL。   注意指针变量只是一个特殊的变量实际上它存的是整数值但是它是内存中的某个地址。通过它可以访问这个地址。     程序2void  myMalloc(char  **s)   {        *s(char  *)  malloc(100);   }     void  main()   {        char  *pNULL;        myMalloc(p);    //这里的p可以得到正确的值了        if(p)  free(p);   }   程序2是正确的为什么呢看一个执行过程就知道了   myMalloc(p);将p的地址传入函数假设存储p变量的地址是0x5555则0x5555这个地址存的是指针变量p的值也就是Ox5555指向p。   调用的时候同样分配一个临时变量char  **s此时s  的值是p的值也就是0x5555但是s所占的空间是另外的空间只不过它所指向的值是一个地址Ox5555。   *s(char  *)  malloc(100);这一句话的意思是将s所指向的值也就是0x5555这个位置上的变量的值赋为(char  *)  malloc(100)而0x5555这个位置上存的是恰好是指针变量p这样p的值就变成了(char  *)  malloc(100)的值。即p的值是新分配的这块内存的起始地址。     这个问题理解起来有点绕关键是理解变量作函数形参调用的时候都是要分配一个副本不管是传值还是传址。传入后就和形参没有关系了它不会改变形参的值。myMalloc(p)不会改变p的值p的值当然是NULL它只能改变p所指向的内存地址的值。但是myMalloc(p)为什么就可以了它不会改变(p)的值也不可能改变但是它可以改变(p)所指向内存地址的值即p的值。     ---------------------------------------------------------------     你要弄清楚的是指针变量和指针所指的变量可能是一片内存。     指针变量和普通变量一样存储的     如int  *p;  int  i;  p和i都是变量都占用一个字的内存都可
http://www.zqtcl.cn/news/67066/

相关文章:

  • 网站建设平台开发集团门户网站建设公司
  • 深圳龙华汽车网站建设企业网站的页面特点
  • 做图像网站学做电商网站
  • 杭州网站制作哪家好wordpress主题集成插件下载
  • 网站建设协调机制作文网入口
  • 南宁网站建设哪家公司实力强wordpress推荐形式模版
  • 做外贸免费的网站有哪些网站如何绑定域名
  • 属于网站的管理 更新 维护wordpress个人支付插件
  • 校园图书馆网站建设官方网站建设 磐石网络知名
  • 域名建网站福州网站建设要找嘉艺网络
  • 毕业设计可以做哪些简单网站智能建站免费
  • 郑州网站建设兼职一个公司可以做两个网站吗
  • 宜春网站建设哪家专业怎么申请商标品牌
  • 网站建站公司多少钱专业网站建设电话
  • 哪些网站可以做签约设计师大理州建设局网站门户网
  • 长沙做网站seo优化外包wordpress采集文章发布
  • 佛山小企业网站建设盐城代运营
  • 佛山电商网站制作施工企业物资管理制度百度
  • 百度搜索不到网站ios开发
  • 番禺网站制作哪里有php高级网站开发
  • 用返利网站做爆款前端外包网站
  • 网站开发方法有哪些wordpress 批量发布器
  • 十大免费行情软件网站下载湖南省建设工程造价管理总站
  • 专做商品折扣的网站皮具网站源码
  • 手机网站可以做商城吗店铺装修
  • 有什么有趣的网站在线图片编辑器图怪兽
  • 贵阳网站定制电话怎么开发一个自己的网站
  • 视觉传达毕业设计网站培训seo多少钱
  • 微网站建设多少钱企业网站建设的要求
  • 房地产公司的网站建设方案好的公司网站制作