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

全景网站怎么做做的网站为什么图片看不了怎么回事

全景网站怎么做,做的网站为什么图片看不了怎么回事,网站建设推广软文,建设网站 托管 费用探究实参与形参它们相互独立 由于主调函数的变量a#xff0c;b与被调函数的形参x#xff0c;y它们相互独立。函数 swap 可以修改变量x#xff0c;y#xff0c;但是却无法影响到主调函数中的a#xff0c;b。 现在利用取地址运算符#xff0c;分别打印它们的首地址#x…探究实参与形参它们相互独立 由于主调函数的变量ab与被调函数的形参xy它们相互独立。函数 swap 可以修改变量xy但是却无法影响到主调函数中的ab。 现在利用取地址运算符分别打印它们的首地址让我们从内存的角度来分析一下它们。 a在内存中为首地址10484860开始的 sizeof(int) 字节。 b在内存中为首地址10484856开始的 sizeof(int) 字节。 x在内存中为首地址10484832开始的 sizeof(int) 字节。 y在内存中为首地址10484836开始的 sizeof(int) 字节。 调用 swap 函数时a的值1传给x。b的值2传给y。 图中红色数值为数据对象首地址黑框内的为变量名和值。 即使xy已经交换了但是并未影响ab。  将指针作为参数传递 由于在被调函数内部无法直接修改主调函数的变量。那么我们采用迂回战术在函数 main 中取得a、b 的指针。将两个指针传递到函数 swap 。那么在函数 swap 内部可以根据这两个信息修改a、b。 这下我们就需要用到指针类型作为参数了。 现在将 x 、 y 改为了 int * 类型的指针。在主调函数中对 a b 进行取地址获取指针并传入函 数 swap 。在函数 swap 内部通过这两个指针交换目标数据对象的值。注意不是交换指针xy的值 而是交换目标数据对象ab的值。所以需要在指针前使用取值运算符*。 图中红色数值为数据对象首地址黑框内的为变量名和值。 现在终于能解释为何在使用 scanf 函数时需要对变量先取地址再传入参数了。 int n; scanf(%d, n); scanf 会从读取从键盘的输入转换后存储到变量n当中。被调函数 scanf 无法直接修改在主调函数中的变量n。因此我们将变量n的指针传入 scanf 函数。通过指针使得被调函数间接地修改主调函数中的变量。 指针不仅仅是首地址 再次强调指针内保存的不仅仅是目标数据对象首地址指针的类型也非常重要。要在内存中找到一个数据对象需要有以下两个信息。 数据对象的首地址。数据对象占用存储空间大小。 指针的值保存着数据对象首地址指针类型对应着目标数据对象的类型用于标记目标数据对象的空间大小和指针运算时的步长。 char * 目标数据对象大小为 sizeof(char) 。运算时步长为sizoef(char)。 short * 目标数据对象大小为 sizeof(short) 。运算时步长为sizoef(short)。 int * 目标数据对象大小为 sizeof(int) 。运算时步长为sizoef(int)。 long * 目标数据对象大小为 sizeof(long) 。运算时步长为sizoef(long)。 long long * 目标数据对象大小为 sizeof(long long) 。运算时步长为sizoef(long long)。 float * 目标数据对象大小为 sizeof(float) 。运算时步长为sizoef(float)。 double * 目标数据对象大小为 sizeof(double) 。运算时步长为sizoef(double)。 若要用函数 swap 交换两个int类型的变量必须传入指向这两个int类型变量的指针。函数内部可以通过指针知道对象的首地址和类型。但是这样也使得函数 swap 只能交换int类型的变量了。 如果想让函数 swap 函数更加通用一点可以交换更多类型的变量。应该怎么做呢 仅有首地址的指针类型void * 由于指针类型定死了指针所指向的数据类型。为了让函数可以交换更多的数据类型我们仅需要指针类型中保存的首地址目标数据大小通过额外的参数传入。 void swap(void *x, void *y, int size) int * 修改为 void * 。类型为 void * 的指针仅保存首地址不保存目标数据对象的空间大小。所以 不能对 void * 类型的指针进行取值。同样的它也没有步长所以不能对 void * 类型的指针进行加减运算。 int n; void *p n;   // int *赋值给void *类型信息被丢弃仅保存首地址。 *p;     // 仅有首地址未保存目标数据对象大小无法取值。 p 1; // 仅有首地址没有步长无法进行加减运算。 但是 void * 有一个好处那就是任意类型的指针都可以直接赋值给它。而其他类型的指针是不能相互赋值的由于赋值会改变目标数据对象的类型。 char *pc; int *pn; pc pn;    // 编译出错目标数据对象类型不同无法直接赋值。 void *p; p pn;     // 编译通过任意类型的指针都可以直接赋值给它。 p pc;     // 编译通过任意类型的指针都可以直接赋值给它。 规律 不同指针类型不能相互赋值相互赋值后会造成目标数据对象类型的改变无法通过编译。void * 类型为特例它可以接受任意指针类型的赋值也可以赋值给任意类型的指针。 我们将函数定义修改为 void swap(void *x, void *y, int size) { // 指针转为char *单个字节操作内存 char *pX (char *)x; char *pY (char *)y; char temp; for (int i 0; i size; i) { temp pX[i]; pX[i] pY[i]; pY[i] temp; } } 由于 void * 不能取值和加减所以我们将其转换为 char * 。 char * 可以提供单个单个操作内存的能力。 在C语言中 void * 类型不但可以接受任意类型的指针也可以自动转换为任意类型的指针。 但在C中规则稍微严格了一点 void * 仅能接受任意类型的指针不能自动转换为其他类型的指针。为了保证代码的兼容性我们将 void * 强制转为 char * 避免在C中编译出错。 char *pX (char *)x; char *pY (char *)y;
http://www.sczhlp.com/news/194945/

相关文章:

  • 苏州品牌网站设计定制做网站 小程序前景
  • 东莞免费建站公司长沙做一个网站要多少钱
  • 淘宝美工做倒计时图片网站组合图片可以用在网站做链接吗
  • 英文网站建设教程丹东网站建设公司
  • 网站开发使用软件环境建设 大型电子商务网站
  • 网站建设背景资料分销平台软件
  • 公司制作网站跟企业文化的关系建设网游小说
  • php网站中水印怎么做的家装公司是做什么的
  • 浙江微信网站建设线上免费推广平台都有哪些
  • 水资源论证网站建设手机 上传 Wordpress
  • 安陆网站设计app开发模板
  • 太原网站建设找山西云起时wordpress文章分享到QQ空间
  • 电子类网站建设工业和信息化部工业文化发展中心
  • 阜阳网站是订货网站开发价格
  • UML复习
  • 2025 值得关注的除锈剂厂家企业推荐榜单,覆盖多场景需求
  • Day3整形输入
  • 2025优质电缆/防火/模压/瓦楞/大跨距/热镀锌/热浸锌/不锈钢/光伏/铝合金/锌铝镁桥架厂家推荐:五家实力企业的技术与服务特色解析
  • 2025 领域优质石油/电厂/钢铁厂/化工/消防/船舶/住宅/管道/隧道/地铁电伴热带厂家推荐榜单,工业与民用场景全覆盖
  • 在哪个网站做淘宝水印网站空间每年继费到哪交
  • 网页设计自学视频网站网站上的导航栏怎么做
  • 自己做的网站打不开怎么搞重庆市建设工程信息官方网站
  • 做测评的网站wordpress汉字
  • 百度站长之家西安网页制作培训
  • 汽车网站建设的目的视频网站如何做营销
  • 专业APP客户端做网站游戏网页制作模板
  • 东莞网站建设培训学校wordpress 3.6升级4.7
  • 西域数码网站建设商业网站建设的意义
  • 淮安网站制作多少钱wordpress 安卓主题下载失败
  • 湖南郴州市苏州优化网站