c语言初学者笔记-数组的输入

解题需注意输入的是多个数还是字符串

例:input:10010

     char ch[100000];

     scanf("%s",ch);

例:input:1  0   0  (即输入三个值)

      int n=3;

      int arr[10000];

      for(int i=0;i<n;i++){

      scanf("%d",&arr[i]); }    

     

1. scanf("%d", &arr[i]);

· 解释:这是在for循环中使用的方式,其中i是循环变量。arr[i]表示数组arr的第i个元素,&arr[i]获取该元素的内存地址。
· 作用:正确地将输入的值存储到数组的指定位置(第i个元素)。循环执行时,可以依次输入多个值到数组的不同位置。
· 类型匹配:&arr[i]的类型是int*(指向整型的指针),与%d格式说明符匹配,这是标准且安全的用法。

2. scanf("%d", arr);

· 解释:这里直接使用数组名arr。在C语言中,数组名代表数组的首地址,即arr等价于&arr[0]。
· 作用:将输入的值存储到数组的第一个元素(arr[0])。但因为它不在循环中,所以只输入一个值,覆盖第一个元素。
· 类型匹配:arr的类型是int*(衰减为指向整型的指针),与%d匹配,因此语法正确。但通常用于单次输入,而不是批量输入。

3. scanf("%d", &arr);

· 解释:这里使用&arr,即获取整个数组的地址。虽然&arr的值与数组首地址相同,但类型不同:&arr的类型是int (*)[1000](指向长度为1000的整型数组的指针),而不是int*。
· 作用:理论上,由于地址值相同,输入的值可能仍然被存储到数组的第一个元素。但严格来说,这是类型不匹配,会导致未定义行为(undefined behavior)。编译器通常会产生警告(如warning: format specifies type 'int ' but the argument has type 'int ()[1000]')。
· 风险:不推荐使用这种方式,因为它可能在某些平台上引发错误,或导致不可预知的行为。

总结区别:

· 语法和类型:第一种和第二种方式类型正确,第三种方式类型不正确。
· 功能:第一种方式用于循环输入多个值,第二种方式用于输入单个值到数组开头,第三种方式有风险且应避免。
· 安全性:第一种和第二种是安全的,第三种不安全。

在实际编程中,应始终确保scanf的参数类型与格式说明符匹配,以避免潜在问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值