初心者のWEBデザイン

HTML,CSS、その他WEBデザインに関する事を記述していきます.

C言語 ポインタの増減

C言語ポインター指定の()の有無で動作的にハマったので
メモしておきます。

下記のソースコードコンパイルして実行します。
引数は【./pointer.c】【cat】【dog】【bird】です。

#include <stdio.h>
int main(int argc, char *argv[]) {
  printf("  要素数は%dつです。\n", argc);
  int i = 0;
  for(i=0; i < 4; i++) {
    printf("  %d番目のアドレスは%p  //%s\n", i, argv[i], argv[i]);
  }

  printf("  *argv + 1   アドレス  【%p\n", *argv + 1);
  printf("  *(argv + 1) アドレス  【%p\n", *(argv + 1));
  printf("  *(argv + 2) アドレス  【%p\n", *(argv + 2));
  printf("  *(argv + 3) アドレス  【%p\n", *((argv + 3)));
  printf("  *argv + 1     【%s\n", *argv + 1);
  printf("  *(argv + 1)   【%s\n", *(argv + 1));
  printf("  *(argv + 2)   【%s\n", *(argv + 2));
  printf("  *(argv + 3)   【%s\n", *(argv + 3));

  return 0;
}

実行結果

  要素数は4つです。
  0番目のアドレスは0x7ffeecd78b80  //./pointer
  1番目のアドレスは0x7ffeecd78b8a  //cat
  2番目のアドレスは0x7ffeecd78b8e  //dog
  3番目のアドレスは0x7ffeecd78b92  //bird
   *argv + 1  アドレス  【0x7ffeecd78b81】
  *(argv + 1) アドレス  【0x7ffeecd78b8a】
  *(argv + 2) アドレス  【0x7ffeecd78b8e】
  *(argv + 3) アドレス  【0x7ffeecd78b92】
   *argv + 1    【/pointer】
  *(argv + 1)   【cat】
  *(argv + 2)   【dog】
  *(argv + 3)   【bird】


argvに1を足すと最初の要素のポインタ【0x7ffeeed66b80 + 1】になります。
(argv + 1)と記述すると次の要素のポインタへのアクセスとなります。
argv[0 + 1]と同等の意味になります。