C-以下程序中的指针是什么意思



(这不是我的作业,而是我的老师没有提供任何答案的修订论文。(

我有疑问,要求我们在以下代码中填写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] = '';

最新更新