我从朋友那里得到了一个代码
我曾几次看过代码。
我根本不理解它的过程和一些奇怪的语法。
#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;
}
input + i
之后的scanf
是什么?这个程序是如何运作的(我是一个慢学习者)?
答案 0 :(得分:10)
在表达式input + i
中,input
是一个数组。在表达式中使用时,数组的名称将转换为指向数组的第一个元素的指针。将i
添加到input
指针会产生指向数组的i
th 元素的指针。编写相同内容的更清晰的方法是&input[i]
。
因此编写等效scanf的简单方法是:
scanf("%d", &input[i]);
点是表达式input[i]
等同于*(input + i)
。
表达式&input[i]
等同于&*(input + i)
或仅(input + i)
,这就是scanf需要的i
th 元素的地址。
了解阅读10.2 Pointers
and Arrays
; Pointer Arithmetic和Pointer Arithmetic。
答案 1 :(得分:2)
<array name>
中的 <integer>
+ input + i
求值为scanf()
函数将stdin扫描整数放入的内存地址。