Loose-Info.com
Last Update 2012/07/05
TOP - C言語 - ポインタ - 演算

ポインタの演算は次のような結果となります。

・単項演算子*を伴う場合
ポインタの指すオブジェクトの値に関する演算結果

・単項演算子*を伴わない場合
ポインタに格納されるアドレス自体の演算結果

(例)
#include <stdio.h> int main() { int *p1; double *p2; char *p3; int i = 1; double d = 2.0; char c = 3; p1 = &i; p2 = &d; p3 = &c; printf("演算前 *p1 : %d\n", *p1); printf("演算前 *p2 : %3.1f\n", *p2); printf("演算前 *p3 : %d\n\n", *p3); *p1 = *p1 + 3; /* 単項演算子*を伴う演算 */ ++*p2; *p3 = *p3 + '0'; printf("演算後 *p1 : %d\n", *p1); printf("演算後 *p2 : %3.1f\n", *p2); printf("演算後 *p3 : %d\n\n", *p3); printf("演算前アドレス p1 : %p\n", p1); printf("演算前アドレス p2 : %p\n", p2); printf("演算前アドレス p3 : %p\n\n", p3); p1++; /* 単項演算子*を伴わない演算 */ p2++; p3++; printf("演算後アドレス p1 : %p\n", p1); printf("演算後アドレス p2 : %p\n", p2); printf("演算後アドレス p3 : %p\n\n", p3); printf("アドレス演算後 *p1 : %d\n", *p1); printf("アドレス演算後 *p2 : %3.1f\n", *p2); printf("アドレス演算後 *p3 : %d\n", *p3); return 0; }

実行結果
演算前 *p1 : 1 演算前 *p2 : 2.0 演算前 *p3 : 3 演算後 *p1 : 4 演算後 *p2 : 3.0 演算後 *p3 : 51 演算前アドレス p1 : 0x7fff5fbff828 演算前アドレス p2 : 0x7fff5fbff808 演算前アドレス p3 : 0x7fff5fbff82f 演算後アドレス p1 : 0x7fff5fbff82c <- 4バイト増加 演算後アドレス p2 : 0x7fff5fbff810 <- 8バイト増加 演算後アドレス p3 : 0x7fff5fbff830 <- 1バイト増加 アドレス演算後 *p1 : 855670783 <- 不定値 アドレス演算後 *p2 : 0.0 <- 不定値 アドレス演算後 *p3 : 64 <- 不定値