Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是<;数组名称>+&书信电报;常数>;在scanf()中?_C_Arrays_Pointers - Fatal编程技术网

什么是<;数组名称>+&书信电报;常数>;在scanf()中?

什么是<;数组名称>+&书信电报;常数>;在scanf()中?,c,arrays,pointers,C,Arrays,Pointers,我从朋友那里得到了一个密码。 我已经看过代码好几次了 我根本不理解它的过程和一些奇怪的语法 #include <stdio.h> int main(){ int n, input[1000], i, j, k, max = 0; scanf("%d", &n); for(i = 0; i < n; i++){ scanf("%d", input + i); if(input[i] > max)

我从朋友那里得到了一个密码。
我已经看过代码好几次了
我根本不理解它的过程和一些奇怪的语法

#include <stdio.h>
int main(){
    int n, input[1000], i, j, k, max = 0;
    scanf("%d", &n);
    for(i = 0; i < n; i++){
       scanf("%d", input + i);
       if(input[i] > max) 
          max = input[i];
    }
   for(i = 1; i <= max; i++){
       for(j = 0; j < n; j++){
           if(input[j] + i <= max)
             for(k = 0; k < input[j] * 2; k++) 
                putchar(' ');
           else{
             for(k = 0; k < input[j]; k++){
                if(max - i == k)
                    putchar('/');
               else 
                    putchar(' ');
             }
             for(k = input[j] - 1; k >= 0; k--){
               if(max - i == k)
                    putchar('\\');
               else 
                    putchar(' ');
             }
         }
     }
     putchar('\n');
  }
  getch();
  return 0;    
}
#包括
int main(){
int n,输入[1000],i,j,k,max=0;
scanf(“%d”和“&n”);
对于(i=0;i最大值)
最大值=输入[i];
}

对于(i=1;i在表达式
input+i
中,
input
是一个数组。在表达式中使用时,数组的名称将转换为指向数组第一个元素的指针。将
i
添加到
input
指针将导致指向数组第
i
个元素的指针。编写相同内容的更清晰方法事情将是
&输入[i]

因此,编写等效scanf的简单方法是:

scanf("%d", &input[i]); 
点是表达式
input[i]
相当于
*(input+i)

表达式
&input[i]
相当于
&*(input+i)
或只是
(input+i)
,这就是scanf所需要的
i
元素的地址


理解并读取。

+
表达式中的
input+i
计算为
scanf()
函数将从stdin中放入扫描整数的内存地址。

它与
scanf(“%d”,&input[i”)相同关于这段代码,我要说的第一件事是缩进被破坏了,一个装满空格的袋子也不会受伤。这样读起来很难。博萨巴·赫克索:现在观察一下缩进和空格之间的区别。最好说“被转换成”而不是“衰减”。可能吧。不一定。@ElchononEdelson我不确定,但
衰减
是数组表达式的常用术语……是的,我在wiki上读到“这是数组名称转换为指向数组第一个元素的指针这条规则的少数例外之一”…衰变是一个常用的术语,是的,但C标准并没有使用它,我相信在某些情况下,它会让人困惑。(正如我所说的,它可能更好。我并不认为它更好。)在这里你不觉得很困惑吗?如果你觉得可以自由地纠正我的英语…谢谢。考虑一下这个备选措辞:
input
是一个数组。在表达式中使用时,数组的名称将转换为指向数组第一个元素的指针。向该指针添加
i
将导致指向数组第
i
个元素的指针。编写相同内容的更清晰方法是
&input[i]