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

时间:2018-02-27 13:32:24

标签: c pointers

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

我有问题要求我们在以下代码中填写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)的含义以及空白的答案?

1 个答案:

答案 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';