2011年3月30日 星期三

Pointer


int i = 5;
int *p = &i;
int y = *p;


首先是
int i = 5;
代表於某一memory(假設1234)中設定variable i = 5。




再來是
int *p = &i;
表示說於某一memory(假設2468)中設定p為x的記憶體位置(1234)。




最後是
int y = *p;
因為p=1234
然後記憶體1234的值為5(i = 5)



另外,若
int i = 5;
int *p = &i;
int y = *p;

*p = 7

則因為 p = (i的位置)
所以 i = 7



Example



#include <stdio.h>

int main(void){
int x = 5;
int *p = &x;
int y = *p;

*p = 10;

printf("\t%15c%15c%15c\n",'x','p','y');

printf("num\t");
printf("%15d", x);
printf("%15p", p);
printf("%15d", y);
printf("\n");

printf("*\t");
printf("%15d", x);
printf("%15d", *p);
printf("%15d", y);
printf("\n");

printf("&\t");
printf("%15p", &x);
printf("%15p", &p);
printf("%15p", &y);
printf("\n");
}

結果:

              x              p              y
num             10 0x7fff1cd0b808              5
*             10             10              5
& 0x7fff1cd0b808 0x7fff1cd0b800 0x7fff1cd0b7fc



紅字為「記憶體位置,所以每次的值都不一樣」

沒有留言:

張貼留言