c言語における文字ポインタと文字配列の違い:
charは単一の文字を格納するために使用されます.
例:
char[]は、複数の文字を格納するために使用される.
例:
//配列は本質的に複数の変数を同時に定義し、変数を初期化する
char[]の最後の文字が「0」の場合、これは文字列です.
例:
文字列は次のように書くこともできます.
注:ch 2はローカルポインタ変数であり、スタックに格納され、「helloworld」は定数領域に格納されます.しかし,ch,ch 1およびその中の配列,hello,worldはいずれもスタックに格納されている.
//char*文字ポインタはint*に比べて形式的に多くなっています.
1)
//char*とint*の同じ場所です.
2)
//char*は文字列定数を直接割り当てることもできます!!!これとint*の違い.
//実質的に「helloworld」は、文字列定数そのものではなくアドレスを返します.
文字列配列を初期化する方法は2つあります.
1)定義時に直接初期化:
2)文字配列を用いたコピー関数
注意:dstは既に申請されたメモリユニットであり、十分な修正可能なメモリ領域であり、src内の文字個数を盛る必要があり、定数を指す文字列定数ではないため、文字配列char ch[6]であってもよい.newのメモリでも
でもできない
まとめ:
1)文字ポインタは文字列を指すことも、ある文字変数を指すこともできる.
2)文字配列名は定数であるため、配列名は++できない.文字ポインタは変数なので、ポインタは++できます.
文字配列は変数の集合であるため、文字配列要素は++であってもよい.文字ポインタは文字列定数を指し、定数は++できないため、*p++はエラーです.
例:
char ch=’a’;
char[]は、複数の文字を格納するために使用される.
例:
char ch[5]={‘h’, ‘e’, ‘l’, ‘l’, ‘o’};
//配列は本質的に複数の変数を同時に定義し、変数を初期化する
char[]の最後の文字が「0」の場合、これは文字列です.
例:
char ch[6]={‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
文字列は次のように書くこともできます.
char ch[6]=”hello”;// char ch[]=”hello”;// ,
char ch1[]=”world”;// ,
char *ch2=”hello world”;// , const char *ch =”hello world”;
注:ch 2はローカルポインタ変数であり、スタックに格納され、「helloworld」は定数領域に格納されます.しかし,ch,ch 1およびその中の配列,hello,worldはいずれもスタックに格納されている.
//char*文字ポインタはint*に比べて形式的に多くなっています.
1)
int* i=&j;// ;
char ch[]=”hello world”;//ch
char* p=ch;// h
*p =’T’// , p
//char*とint*の同じ場所です.
2)
char* ch=”hello world”;
//char*は文字列定数を直接割り当てることもできます!!!これとint*の違い.
//実質的に「helloworld」は、文字列定数そのものではなくアドレスを返します.
文字列配列を初期化する方法は2つあります.
1)定義時に直接初期化:
char ch[]=”hello”;
2)文字配列を用いたコピー関数
char* strcpy(char *dst, const char *src);
char ch[6];
char *p=”hello”;
strcpy(ch,p);
注意:dstは既に申請されたメモリユニットであり、十分な修正可能なメモリ領域であり、src内の文字個数を盛る必要があり、定数を指す文字列定数ではないため、文字配列char ch[6]であってもよい.newのメモリでも
char *ch= new char[6];
でもできない
char *ch;
strcpy(ch,p);// !!!!
まとめ:
1)文字ポインタは文字列を指すことも、ある文字変数を指すこともできる.
2)文字配列名は定数であるため、配列名は++できない.文字ポインタは変数なので、ポインタは++できます.
文字配列は変数の集合であるため、文字配列要素は++であってもよい.文字ポインタは文字列定数を指し、定数は++できないため、*p++はエラーです.