Last Update 2012/07/05
ポインタの演算は次のような結果となります。
・単項演算子*を伴う場合
ポインタの指すオブジェクトの値に関する演算結果
・単項演算子*を伴わない場合
ポインタに格納されるアドレス自体の演算結果
(例)
#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 <- 不定値