什么是<;数组名称>+&书信电报;常数>;在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]