(这不是我的作业,而是我的老师没有提供任何答案的修订论文。(
我有疑问,要求我们在以下代码中填写2个空白。
#include <stdio.h>
int main() {
int i, x[] = {-5,10,-10,-2,23,-20};
char y[20] = "goodbye";
char * p = y;
for (i=0;i<6;i++){
*(p+i)= /*blank*/ ;
}
y[6] = /*blank*/ ;
printf("%sn",p);
}
上述程序生成的输出是byebye
。
我想找出 *(p+i)
的含义和空白的答案?
像这样的表达式
y[i]
由编译器(根据C标准(计算,使用指针算术(例如
(*( y + i )
因此,在程序中,您只用y
替换为变量p
。
看来该程序应该看起来像
#include <stdio.h>
int main(void)
{
int i, x[] = { -5, 10, -10, -2, 23, -20 };
char y[20] = "goodbye";
char * p = y;
for ( i = 0; i < 6; i++ )
{
*( p + i ) = *( p + i ) + x[i];
}
y[6] = ' ';
printf( "%sn", p );
return 0;
}
您可以例如表达式x[i]
代替*( x + i )
。那是这个语句
*( p + i ) = *( p + i ) + x[i];
可以像
一样写y[i] = y[i] + x[i];
或
p[i] = p[i] + x[i];
或
*( y + i ) = y[i] + x[i];
或
*( p + i ) = y[i] + x[i];
或
*( p + i ) = *( p + i ) + *( x + i );
等等。
注意for循环中的魔术数6令人困惑。
for ( i = 0; i < 6; i++ )
^^^
最好至少写
const size_t N = sizeof( x ) / sizeof( *x );
for ( size_t i = 0; i < N; i++ )
//...
y[N] = ' ';