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

网站单页面制作快速网站建设费用

网站单页面制作,快速网站建设费用,秀堂h5官网,找网页设计公司前言 使用数组名作为函数参数#xff0c;或者使用数组名的地址作为函数参数#xff0c;常常出现于对于字符串的读入问题之中。 常有以下两种写法#xff1a; 这是使用数组名作为函数参数 #includecstdio char s[100]; int main() {scanf(%s,s); }在…前言 使用数组名作为函数参数或者使用数组名的地址作为函数参数常常出现于对于字符串的读入问题之中。 常有以下两种写法 这是使用数组名作为函数参数 #includecstdio char s[100]; int main() {scanf(%s,s); }在编译时不会出现报错和警告。 2.这是使用数组名的地址作为函数参数 #includecstdio char s[100]; int main() {scanf(%s,s); }在编译的时候不会报错默认不会有警告。但是编译选项中开启-Wall显示全部警告就会出现警告。 警告的原因是scanf函数的%s选项期望获得一个字符类型的地址作为读入字符串的起始地址。而s事实上是一个字符数组类型的地址而不是字符类型地址。 -Wall编译选项会检查scanf对应的不定参数列表中提供的类型是否正确因此会警告。不开启-Wall选项则不会检查是否正确则不会警告。 区别 然而这样的写法虽然会引起编译的警告但并不会导致编译错误而且也不会引发程序运行的错误。 准确来说在大部分实现上二者达到的目的是一样的。 尽管在标准中并不确保scanf提供参数类型错误时也会得到正确的结果但是由于实现的关系往往能得到正确的结果。 但是这两种方法仍然是有微小的区别的在我们将s[0]作为读入的第一个字符的时候两者没有区别但假如我们将s[1]作为读入的第一个字符那它们将会出现不同的结果。 s[0]作为第一个字符 第一种写法 #includecstdio char s[100]; int main() {scanf(%s,s);printf(%s,s); }运行结果正确 第二种写法 #includecstdio char s[100]; int main() {scanf(%s,s);printf(%s,s); }运行结果正确 以s[1]作为第一个字符 第一种写法 #includecstdio char s[100]; int main() {scanf(%s,s1);printf(%s,s1); }运行结果正确 第二种写法 #includecstdio char s[100]; int main() {scanf(%s,s1);printf(%s,s1); }运行结果错误 这是实际上是发生了访问越界可以放大一下访问倍数就会报运行错误 #includecstdio char s[2000]; int main() {scanf(%s,s20);printf(%s,s20); }运行错误 具体区别 对于这个字符数组 char s[10]{};首先我们知道s和s在数值上确实是相等的但是其指向的类型并不相同。 但是我们知道s1与s1在数值上不一定是相等的 可以用这个程序对比一下 #includeiostream using namespace std; int main() {char s[10]{};auto ps;coutpendl;coutp1endl;coutendl;coutstatic_castvoid*(s)endl;coutstatic_castvoid*(s1)endl;这里要用关键字static_cast将s的类型从char*转化为void*是因为cout默认会将char*按照字符串格式输出而不会选择输出一个地址这里不使用c风格强制类型转换主要是出于习惯 }我们发现s1与s相差了1而s1与s却相差了10 原因 要弄清楚这个问题的原因就需要先了解清楚s和s有什么区别。也就是数组名和数组名的地址有什么区别。 那么首先我们要知道将普通变量1后其数值会增加1。但是将指针变量1后增加的值等于其指向的类型占用的字节数。 如果我们认为int是4个字节那么也就是说 int a[]{0,1}; int* pa[0]; p; 此时p数值增加了4指向了a[1]的位置 此时 *p1同理如果是char类型指针那么1后其数值只会增加1因为char类型只占用一个字节。 其次我们需要知道计算机程序在运行中必须要跟踪的数据的三个信息 变量被存储在哪里变量的值是多少变量的类型是什么 我们知道数组名在C中通常被看做是指向数组第一个元素的指针也就是说s被看做是一个指向s[0]位置的char类型指针也就是char*。 当然这个说法并不准确事实上s的类型在程序中被跟踪为一个“长度为10的字符数组”但是s1则只被识别为“指向s[1]位置的字符指针” 使用typeid方法获得的类型信息 这里的A表示“array”是数组。 “10”表示数组长度。 “P”表示一个指针。 “c”表示“char”。 我们将s看作是指向数组第一个元素的指针因此s1比s增加了一个字节也就是一个char类型的长度。 我们同样可以打出s的类型 这表明编译器认为s是一个指向长度为10的字符数组的指针因此s1与s之间相差了10个字节。 指向数组的指针这个类型十分复杂以至于用常规方法很难只用一条语句就把它声明出来。 我想到三个方法可以把它声明出来 可以使用decltype方法自动推导类型 decltype(s) *ps;可以使用auto方法自动推导类型 auto ps;可以使用多条语句来声明此类型 typedef char T[10]; 先用typedef语句声明一个T类型T类型是一个长度为10的字符数组T* ps; 再声明一个T类型指针后记 于是皆大欢喜。
http://www.sadfv.cn/news/247323/

相关文章:

  • 二手网站建设论文百度站长工具对seo的帮助
  • 动漫网站建设欧洲paypal网站
  • 河东区建设局网站专业网站建设常州
  • 注册网站的免费网址com新乐企业网站建设
  • 石家庄规划建设局网站做网站点击挣钱不?
  • 网站建设与管理小论文大良网站建设
  • 江苏鑫圣建设工程有限公司网站沈阳做网站的公司排名
  • 空气炸锅做糕点的网站网站改版页面不收录
  • 电话销售网站建设做电影资源网站违法吗
  • 如何制作网站视频e4a怎么做网站app
  • 莱芜金点子网站网页升级紧急通知正常更新
  • 企业网站设计苏州wordpress扫码收款
  • 怎样做自己的公司网站网站建设维护方案
  • 会员小程序怎么做抚州企业网站做优化
  • ae如何做视频模板下载网站昆明网站制作维护
  • 企业网站建设的研究开发方法及技术路线怎样用模板做网站
  • 公司网页网站建设+ppt模板下载wordpress+中国+论坛
  • 郓城菏泽网站建设买个网站空间
  • 白云手机网站开发杭州seo外包
  • 网站换域名有没有影响吗株洲最新通知今天
  • 网站代理登录域名奇缦科技珠海网站建设优化
  • 教育 网站模板电子商务网站建设评估的指标
  • 网站建设订流量什么意思做门窗的建网站怎么赚钱
  • 盐城快速建设网站公司林云seo博客
  • 岳阳公司做网站厦门大型服装商城网站建设
  • 北京搜索引擎优化seo专员烟台seo关键词排名
  • 一份完整的网站策划书做旅行网站的依据及意义
  • 如何制作外贸网站 wordpress百合怎么做网站
  • 西安网站开发huanxi快对作业小程序入口
  • 电子商务网站建设实践报告摘要电话销售做网站推销