(这不是我的作业,而是我的老师没有提供任何答案的修订文件。)
我有问题要求我们在以下代码中填写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("%s\n",p);
}
上述程序生成的输出为byebye
。
我想了解*(p+i)
的含义以及空白的答案?
答案 0 :(得分:3)
像这样的表达
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] = '\0';
printf( "%s\n", 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] = '\0';