指標

指標是什麼

int detian = 1010 ;
printf("value of detian : %d\naddress of detian : %p\n", detian, &detian) ;

取址運算子&

&detian:detian的記憶體位址

//output
value of detian : 1010
address of detian : 0x16b9c735c

  程式碼

  輸出

指標是什麼

  • 儲存記憶體位址的變數

變數名稱:德田館

變數值:csie_student

位址:辛亥路二段170號

變數名稱:阿伯給的紙條

變數值: 辛亥路二段170號 

位址: 羅斯福路四段1號 

指標的宣告!

int detian = 1010 ;
int *note ;
note = &detian ;
printf("value of detian : %d\naddress of detian : %p\n", detian, &detian) ;
printf("value of note : %p\naddress of note : %p\n", note, &note) ;

指向的變數型別

//output
value of detian : 1010
address of detian : 0x16b9c735c
value of note : 0x16b9c735c
address of note : 0x16b9c7350 

指標宣告!

  程式碼

  輸出

*變數名稱

變數名稱:detian

變數值:1010

位址:0x16b9c735c

變數名稱:note

變數值: 0x16b9c735c 

位址:0x16b9c7350

//output
value of detian : 1010
address of detian : 0x16b9c735c
value of note : 0x16b9c735c
address of note : 0x16b9c7350 

指標宣告!

  輸出

取值運算子*

取值運算子*

int detian = 1010 ;
int *note ;
note = &detian ;
printf("note is pointing to the value : %d\n", *note) ;
*note += 100000 ;
printf("value of detian : %d", detian) ;

  程式碼

//output
note is pointing to the value : 1010
value of detian : 101010

  輸出

對於*note進行運算會改變detian的值!

陣列中的指標

int arr[3] = {5, 6, 7} ;
for (int i = 0; i < 3; i++) {
	printf("arr[%d] | value : %d  address : %p\n", i, arr[i], &arr[i]) ;
}
printf("arr points to %p\n", arr) ;
printf("arr[2] | value : %d address  : %p\n", *(arr + 2), arr + 2) ;

  程式碼

//output
arr[0] | value : 5  address : 0x16f9ef348
arr[1] | value : 6  address : 0x16f9ef34c
arr[2] | value : 7  address : 0x16f9ef350
arr points to 0x16f9ef348
arr[2] | value : 7 address  : 0x16f9ef350

  輸出

陣列中的指標

arr這個變數名稱本身就是一個指向arr[0]記憶體位址的指標

(arr + 2) 代表的是arr[2]的記憶體位址

Made with Slides.com