配列 ( ゚д゚)  ポインタ

http://journal.mycom.co.jp/articles/2008/04/18/pointer/index.html

 配列 ( ゚д゚)  ポインタ
  ヽ/| y |ヽ/

      °。o 混ぜるな危険
 ( ゚д゚) 。o°o。 
 (ヽ/ヽ/    
 _

  • int func(unsigned char buffer[]);

1. 引数 は \0終端文字列で有る保証はない( unsigned char のため )
1.1 文字列でない可能性が高い
1.2 文字列として暗示したいのであれば( char [] にすべきである)
3. 引数 は 文字列の先頭から来るようにした方が良い。
4. 呼び出し元は引数 がfuncで書き換えられる可能性があることを考慮している
(4.1 引数 に返り値を書く可能性がある not const char*)

char *string = "11111";
func(string);
  • int func(unsigned char *pointer);

1. 引数 は \0終端文字列で有る保証はない( unsigned char のため )
3. 引数 が文字列で有ったとしても文字列の先頭から来る保証はない。
3.1 そこを指してるだけ
4. 呼び出し元は引数 がfuncで書き換えられる可能性があることを考慮している
(4.1 引数 に返り値を書く可能性がある not const char*)

char *string = "11111";
func(&(string[4]));
  • int func(unsigned char stringlist);

1. 引数 は \0終端文字列で有る保証はない( unsigned char のため )
3. 引数 は 文字列の先頭から来るようにした方が良い。
3.1 なるべくリストの先頭を指すようにした方が良い
4. 呼び出し元は引数 がfuncで書き換えられる可能性があることを考慮している

char *stringlist[] = { "11111", "22222", "33333", };
func(stringlist);
  • int func(unsigned char *stringlist[]);

1. 引数 は \0終端文字列で有る保証はない( unsigned char のため )
3. 引数 は 文字列の先頭から来るようにした方が良い。
3.1 ただし、リストのどこを指しているかは不明
4. 呼び出し元は引数 がfuncで書き換えられる可能性があることを考慮している

char *stringlist[] = { "11111", "22222", "33333", };
func(&stringlist[1]);
  • int func(unsigned char **pointer);

1. 引数はよく分からん先のよく分からんを指している(ぉ
1.1. もはや何かわからん(ぉ
3. 配列の配列を指しているが、配列の配列のどこを指しているかは不明瞭
4. 呼び出し元は引数 がfuncで書き換えられる可能性があることを考慮している

char *stringlist[] = { "11111", "22222", "33333", };
char *p = &stringlist[1];
func(&(p[4]));

普通は変数の名前でかえるんだけどもー