1

コードスニペットは次のように与えられます。

char *s[] = {"program", "test", "load", "frame", "stack", NULL};
char **p = s + 2;

次のステートメントの出力を見つける必要があります。

printf("%s", p[-2] + 3);

p[-2]を指しますか?

4

2 に答える 2

2
char *s[] = {"program","test","load","frame","stack",NULL};
char **p = s + 2
printf("%s", p[-2] + 3);
  • 変数schar*ポインターの配列です。
  • 変数pはポインターへのポインターです。ポインター演算は、配列sを aにダウングレードし、 a のサイズの 2 倍の値にchar**初期化します。32 ビット マシンでは、 が を指している場合、は を指します。pchar**s1000p1008

この式p[-2]は と同等で*(p - 2)、 への単純なポインタを返しますchar*。この場合、文字列配列の最初の要素を指す値: "program".

最後に、*(p - 2)is は文字列 の最初の文字を指す式であるため、その単語の 4 番目の文字を指します"program": .*(p - 2) + 3"gram"

printf("%s", *(p - 2) + 3); /* prints: gram */
于 2011-02-14T12:28:22.117 に答える
0

コードをコンパイルしてみましたか? 構文エラーが修正されると、出力はgramになります。

#include <stdio.h>

int main()
{
    char *s[] = {"program","test","load","frame","stack",NULL};
    char **p = s + 2;

    printf("%s",p[-2] + 3);

    return 0;
};

コンパイルと出力については、http://ideone.com/eVAUvを参照してください。

于 2011-02-14T12:41:48.530 に答える