0
  #include<stdio.h>

   int main()
   {
       char str[25] = "helloworld";
       printf("%s %s", &str+2,str+2);
       return 0;
   }

ここでの&str+2とstr+2の違いはstr=&strです。私を助けてください。

ありがとう

4

8 に答える 8

3

配列がある場合:配列str[xxx] strの先頭のメモリアドレスを指定するとstr+2"lloworld". str が格納されているアドレス&strを示します。したがって、 &str+2 を印刷すると、予期しない動作が発生します。

于 2012-09-05T05:12:06.230 に答える
2

&変数が指す値ではなく、その変数のアドレスを取得します。ただし、charの配列を使用すると、値はその配列の先頭(最初のスロット)になります。

&str+2のメモリ位置を取得し、strを追加します2

str+2開始のメモリ位置を取得し、2バイトを追加します(char= 1バイト、ポインタ演算を調べます)。

于 2012-09-05T05:08:17.637 に答える
1

&str + 2は実際にアドレスを提供しますが、ここではprintfステートメントで%sを使用しているため、出力にガベージ値が提供され、str+2の場合は出力はllworldになります。

このリンクで出力コンパイルを数回チェックし、取得する出力を確認してください

http://codepad.org/vODzmZj3

于 2012-09-05T05:21:37.743 に答える
1

他に何もなければ&str(したがって) は、指定子&str+2に渡す型が間違っています。(へのポインター)が必要で、型(25の配列へのポインター) があります。に間違った型を渡すと、未定義の動作が呼び出されます。printf%schar *char&strchar (*)[25]charprintf

さらに、&str長さ 1 の配列を指す (その要素はchar長さ 25 の配列であり、そのうちの 1 つしかない) ため、&str+2範囲外のポインター演算と未定義の動作になります。

于 2012-09-05T05:53:49.523 に答える
0

&strvailabel のアドレスを「9」または 16 進数の「0x009」のように出力します

str+2lloworldここで +2 は増分値として表示されます

于 2012-09-05T05:11:31.040 に答える
0

str + 2 は文字列の 3 番目のシンボルへのポインタ、&str + 2 は文字列プラス 2 へのポインタへのポインタです。

于 2012-09-05T05:22:02.383 に答える
0

str は、文字 (配列の最初の文字) へのポインターです。&str は文字配列へのポインターです。

演算 str+2 を実行すると、2 バイトがインクリメントされます。(本質的にcharポインターとして)。操作 &str+2 を実行すると、22 バイトがインクリメントされます。(文字配列の長さは 11 バイトであるため)。

これが唯一の違いです。

よろしく、 ナガラジ

于 2014-01-29T14:38:11.513 に答える
-2

参考までに以下のコードを試してみてください!

#include<stdio.h>
int main()
{      
    char str1[11] = "1111111111";
    char str2[11] = "2222222222";  
    char str[11]  = "helloworld";
    char str3[11] = "3333333333";
    char str4[11] = "4444444444";

   printf("%s %s\n", &str-2,str+2);
   return 0;
}
于 2012-09-05T06:36:45.867 に答える