|
>
> このサイトを含めていろいろなC言語サイトを見ていますが、
>ポインタを使用した例文には初期設定した変数に応じて
>ポインタ変数も同じ型で初期設定されていました。
>(int型ならポインタもint型、 char型ならポインタもchar型)
>
>そこで疑問に思いました。
>ポインタが変数の番地を相手に仕事をするのであれば、
>int型の変数にはint型のアドレスが、char型の変数には
>char型のアドレスが付くという事なのでしょうか?
>
“char型のアドレスが付く”というのがよく分からないのですが?
例えばpというポインタがchar型の配列のアドレスを持っているとします。
その時、p++またはp+1という動作はどうなればいいのでしょう?
・・・当然、配列の次の要素を指して欲しいですよね?
もし、ポインタの指している要素の型が分からなければ、
p++の演算はどうすればいいのでしょう?
何処を指せばいいか分からなくなりますね?
なので、ポインタ演算時にはポインタが指している要素の型が必要となります。
#void *は特殊です。(そのままでは使えません)
以下の宣言があった場合、
char * cp ;
cp++ ; ←charが1バイトだと1バイトだけ進む。
int * ip ;
ip++ ; ←intが4バイトだと4バイトだけ進む。
という事になります。
演算だけを考えれば、ポインタ++は、その要素のサイズ分進む事になります。
|