スポンサードリンク

【 int 】(整数)型と【 char 】(文字列)型変数のメモリ確保容量と配列の違いを見てみる
※【 int 】型は4バイト使い、【 char 】型は1バイト使います。
※2、【 char 】型の場合は文字終端マーク"\0"が必ず代入されます
下記は文字列と整数型変数宣言とメモリアドレス領域を表して見たものです。
例:【 char a[2]="AB"; 】
例:【 int b[2]={10,20,30}; 】
とそれぞれした場合
メモリ領域 | アドレス0 | アドレス1 | アドレス2 |
char a[2]の場合 | A a[0] |
B a[1] |
\0 a[2] |
メモリ領域 | アドレス0 | アドレス4 | アドレス8 |
int b[2]の場合 | 10 b[0] |
20 b[1] |
30 b[2] |

配列とポインタの関係を簡単にまとめてみました。
※一番最初の【 chp=ch; 】ポインタにchのアドレスを代入しているのですが、通常は【 chp=&cd[0] 】とするのですが、配列の先頭アドレスをポインタに代入する場合のみ、【 chp=ch; 】と【 & 】を省略する事ができます。
※【 chp=&ch; 】とするとコンパイルエラーになります。
#include <stdio.h>
int main(void)
{
char ch[5]="ABC";
char *chp;
chp=ch;
printf("%s\n",ch);
printf("%s\n",chp);
chp=&ch[1];
printf("%c\n",ch[1]);
printf("%c\n",*chp);
chp=&ch[2];
printf("%c\n",ch[2]);
printf("%c\n",*chp);
return 0;
}
解説
文字列変数宣言【 char 】を使用した場合、ポインタ宣言も【 char 】(例:char *chp;)とします。
配列【 ch[5] 】を用意し、それぞれABCを初期値に設定。
※特に【 ch[4] 】としてもOKです。文字列の場合終端マークに0が入るので、余分に配列を用意しております。
上記サンプルにも書きましたが、配列の先頭アドレスをポインタに代入する場合【 & 】と要素を付加しなくていいとの事です。
それぞれ配列要素にてポインタを更新し、それぞれの文字が同じ物が正しく出力されているかを見ております。

上記の出力結果


#include <stdio.h>
int main(void)
{
char ch[5]="ABC";
char *chp;
chp=ch;
printf("配列の先頭アドレス %c\n",*chp);
printf("次の要素をアドレス %c\n",*(chp+1));
printf("その次の要素アドレス %c\n",*(chp+2));
return 0;
}
ポインタを加算することにより、先頭アドレス以降に代入されている文字がそれぞれ出力されます。
ポインタ【 chp 】に配列【ch[0]】の先頭アドレスが代入されているので、ポインタ+1で配列要素【 a[1] 】が出力され、
+2にすると配列要素【 a[3] 】が出力されます。
但し、先のサンプルのようにポインタを更新の上出力しているわけではありませんので、ポインタに代入されているのは先頭アドレスのままです。
ポインタを加算する場合は【 *(ポインタ名+1) 】としないといけません。【 putchar 】を用いてポインタを加算の上出力する場合でも同様です。例【 putchar(*(chp+1)); 】等とします。

上記の出力結果です。

以上で簡単ですが文字列をポインタで処理の説明です。
あかかげまるのC言語入門はこちら!!
スポンサードリンクパソコン勉強部屋 | パソコン勉強部屋2 | ADSL勉強部屋 | メール勉強部屋 | LAN勉強部屋 | ホームページ勉強部屋 | 自宅サーバー勉強部屋 | お役立ちソフトの部屋 | C言語勉強 | 無料ゲーム | 無料セキュリティー | Linuxのコーナー | あかかげまる | オンライン通販 | ショップブランドパソコン | DVDとCD編集ツール |
▲ページトップへ