您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
c语言scanf中char字符数组类型带&与不带&的区别
发布时间:2021-04-15 21:15:49编辑:雪饮阅读()
一般的在c语言中通过scanf获取来自键盘的输入时候我们需要给其传入一个输入格式和一个对应的参照值列表,而这个参照值列表中基本上每个参照值都是需要用&来修饰,即scanf需要的参照值是一个参照值的地址,而不是值本身。
那么有如下程序:
#include <stdio.h>
int main( ) {
char str[100];
int i;
printf( "Enter a value :");
scanf("%s %d", &str, &i);
printf( "\nYou entered: %s %d %p %p", str, i,str,&str);
printf("\n");
return 0;
}
D:\cproject>m.exe
Enter a value :abcd 1234
You entered: abcd 1234 000000000061FDB0 000000000061FDB0
该程序是一个标准的输入示例,这里两个参照值都有用到&将参照值修饰为指针。
那么你会发现这里str也可以不用&符号的
这样也是可以的。
这就有点奇怪了,那么是否这个变量i也可以不要。
其实这里变量i还真存在不要也能运行的情况。
但是也有崩溃的情况。我分别在两个电脑上测试的。环境基本还是一致。但是一个崩溃一个没有崩溃。具体原因不明,但是今天的重点不在这里,因为按照标准来讲都是要&的。
这里主要讲的是这个字符数组为什么可以不用&也能运行。
首先&str表示整个数组的地址,str表示数组首个元素地址
但是这里这两个地址都是一样的,16进制值一模一样。
虽然地址相同,但他们是完全不同的类型。
scanf读取的时候只看传过来的值,这两个参数在数值上是一样的,因此scanf能正确读写。
不管他的类型,所以这两个没有什么差别。
关键字词:c语言,scanf,char,&,字符数组