printf-scanf("%s",&a);与scanf("%s",a);的区别是什么? 为什么下面的两个都正确?

问题描述

scanf("%s",&a);与scanf("%s",a);的区别是什么? 为什么下面的两个都正确?

第一个
char a[1000];
scanf("%s",&a);
printf("%sn",a);
system("pause");

第二个

char a[1000];
scanf("%s",a);
printf("%sn",a);
system("pause");
为什么上面两个运行结果都正确?

解决方案

对数组来说a数组首元素的地址和&a都指向数组的首地址,这两个地址值上来说一样。
scanf接收一长串字符后,都按这个地址一一往后填字符,a[1000]对应的字符就是相同的。
但是a和&a的区别在于地址偏移上&a+1是数组首地址+sizeof(a),也就是指向a数组a[1000]的后面了,而a+1指a[0]+1也就是a[1]代表的地址

解决方案二:

&是占位符的作用
第一个因为是字符串数组,这里的scanf("%s",a);中的a既是一个地址,也是一个数组变量名,也可以是一个指向字符型变量的指针,不过前面有%s,所以可以说 定义时:char a[50]第二个是一般变量 &在这里: 为取地址运算符定义时:int a

解决方案三:

scanf理论上只要取存放数据的地址。但是对于数组有点特殊。它的地址或者数组名都可可以作为地址来处理字符串。所有这里巧合的可以,但是对于其它类型,比如int,char,就需要取地址&

解决方案四:

对于数组,都正确。对于单个变量就不行了。
因为数组中 a a[0] &a[0] 和 &a 都是返回a[0]的地址

时间: 2024-11-03 20:54:26

printf-scanf("%s",&a);与scanf("%s",a);的区别是什么? 为什么下面的两个都正确?的相关文章

printf-为什么倒数第四行又用了一次scanf()函数? 上面不是已经有scanf函数了吗?

问题描述 为什么倒数第四行又用了一次scanf()函数? 上面不是已经有scanf函数了吗? int zm=0sz=0qt=0;char c;scanf(""%c""&c);while(c!='n'){ if(c>='0'&& c <='9') sz++; else if((c>='A' && c<='Z') || (c>='a' && c<='z')) zm++; else

scanf gets-为什么 我就将gets换成了scanf就不会出现这样的问题了

问题描述 为什么 我就将gets换成了scanf就不会出现这样的问题了 #include"stdio.h" #include"ctype.h" int main() { char a[80]={0}; int n; scanf("%d",&n); while(n--) { gets(a); int i,num,sum=0; for(i=0;a[i];i++) { if(isdigit(a[i+1])) { if(isdigit(a[i+2

屏蔽IE弹出&amp;quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&amp;quot;的方法_javascript技巧

在IE6中范例代码如下:window.opener= null;window.close(); 在IE7中示例代码如下: window.opener= null;window.open("","_self"); window.close(); 如果要全屏显示(去掉IE的工具栏.地址栏和菜单栏等信息),则只能用window.open();的方法.如果第一个页面就要全屏显示,则需要设置一个中转页面.中转页面代码如下:(body中什么都不必写) 复制代码 代码如下: &l

谁能解释下&amp;amp;quot;递归的本质就是用压栈与出栈操作&amp;amp;quot;?

问题描述 谁能解释下"递归的本质就是用压栈与出栈操作"? 递归的本质就是用压栈与出栈操作 这句话感觉很有道理啊 解决方案 当递归调用时每次调用自己时可以看做是压栈过程,当递归条件满足结束时,递归一级一级的返回时可以看做是出栈的过程. 解决方案二: 函数调用的本质就是"压栈与出栈操作",递归不过是它的特例,自身调用自身. 解决方案三: 递归可以简单理解为一个大问题分为小问题,然后小问题继续分解,直到能解决,然后几个小问题解决,就是解决一个大问题,金字塔形状最后解决所有

.NET 多线程发送WebRequest访问失败,异常信息:&amp;amp;quot;WebException,基础连接已关闭:连接意外关闭。&amp;amp;quot;(ServicePointManager最大并发数已修改) ,请做过这方面的专家指点一二。

问题描述 前段时间公司要求让我完成一个测试工具,此测试工具用于测试广域网负载均衡.我们的目的是测试客户的负载均衡设备是否正常运转,以及在各种情况下负载均衡设备的运行状况,以保证最终的客户能够时时访问到应用.工具的结构和实现已经大部分完成了,但是在测试阶段,却发现了一些问题,这些问题十分没有规律性,可能涉及一些网络网络方面的知识,本人虽然做的是Web开发,但是对于网络只是也是知之甚少,通过了很长一段的研究,还是没能找到根源.现在将问题分享给大家,希望大家都能有所收获.程序问题:1.WebReque

用linq增加数据时&amp;amp;quot;服务器无法生成类型为“TinyInt”的主键列。&amp;amp;quot;

问题描述 我的数据库一张表中设置了id为主键,类型为tinyint,允许为空,并且是把它做为了一个自增的标识符,当我在vs2008中把表拖进来写好代码增加记录的时候出现了"服务器无法生成类型为"TinyInt"的主键列."我查看了一下自动生成的代码如下[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_id",AutoSync=AutoSync.OnInsert,DbType=&

请问可以在客户进入队列之前播报&amp;amp;quot;正在转接中,请稍后&amp;amp;quot;,当发现坐席全满,客户进入队列的时候报&amp;amp;quot;坐席全忙,请耐心等待&amp;amp;quot;吗?

问题描述 请问可以在客户进入队列之前播报"正在转接中,请稍后",当发现坐席全满,客户进入队列的时候报"坐席全忙,请耐心等待"吗?

请问:如何实现&amp;amp;quot;点击字段名字可以实现按升序,降序排序&amp;amp;quot;?谢谢指教!

问题描述 请问:如何实现"点击字段名字可以实现按升序,降序排序"?谢谢指教! 解决方案 解决方案二:如果是gridview设置下就好了`其他的写点代码再重新绑定下解决方案三:datagrid不是有排序事件吗?解决方案四:datagrid不是有自带的排序事件吗?解决方案五:GridView1.AllowSorting=true;解决方案六:虽然现在不是太明白各位"高手"的意思,仍十分感激各位!解决方案七:察看MSDN中的关于GridView的排序的帮助估计你应该会很快

&amp;amp;quot;创建组件失败.....未将对象引用设置到对象的实例&amp;amp;quot;,这是怎么回事?

问题描述 重新编译了一个dll,使用的时候报这样的异常项目结构是什么问题? 解决方案 解决方案二:完整名称吗解决方案三:断点跟踪,这类问题即可解决.