標籤:編譯器 空間 作業系統
//定義一個指標變數 , 和定義整型變數類似,也包括三部分:資料類型 變數名 = 初值
//只不過指標變數用來儲存地址而已.
//int * 指標變數類型 , p 指標變數名 , NULL 指標變數初值.
//int 的作用 : 1,當自增時增加幾個位元組,2,當存取資料時一次性讀取幾個位元組.
// 定義時 , * 告訴編譯器,後面的變數是一個指標變數;
int * p = NULL ;
//指向關係
p = &a; //將a 的地址賦值給p .
printf("%d\n", a); //直接存取 記憶體單中繼資料
// * p 此時的作用是根據指標變數儲存的地址,找到對應的記憶體單元,將記憶體單元上的資料讀取出來.
printf("%d\n", *p); //間接訪問 /間接訪問記憶體單中繼資料
* p =20 ;
printf("%d\n", a);
printf("%d\n", *p);
//對於指標變數類型,所規定的儲存空間的大小隻和作業系統有關,32位是4個位元組,64位是8個位元組.
int * p1 = NULL;
// //賦初值為NULL , 讓指標變數指向一個無效的空間.
// //當對p1 指向的空間進行操作時,p1 必須指向一個有效空間.
// p1 = & b;
// *p1 = 50 ;
// printf("%d\n" , *p1);
// int c = 30 ;
// p1 = & c ;
// //指標變數的重新賦值,我們叫做指標重指向 ,只看最後一次指向.
// printf("%d\n" , *p1);
//Incompatible pointer types assigning to ‘int * ‘
//incompatible 類型不符....
//Thread 1 : EXC_BAD_ACCESS (code = 1 , address = 0x0)
//沒有指向一個有效空間. 奔潰 crash
//指標與數組
//
// int a [ 5] = {10,11,12,13,14};
//
// int * p = NULL;
// //讓p指向數組的首地址 (數組名 a 就代表數組的首地址 , 代表數組中第一個元素的地址).
// p = a; //
// // printf("%d \n" , *p);
// // p ++ ;
// for (int i = 0 ; i < 5 ; i ++) {
// printf("%d " , *(p + i)); //printf("%d " , *(a + i));
// }
// printf("\n");
// //當把數組的首地址賦給指標變數p之後,指標變數就可以當做數組名來使用.
// //數組名是一個常量不可對其更改.
//指標數組.(數組中的內一個元素都是一個指標變數).
char str [] = "Frank";
//字元數組str 需要儲存字元,所以把常量區中Frank 字串的內容拷貝到數組中. 通過數組操作操作的是棧區的內容.
//而對 數組a 來說,數組中的每一個元素都是一個字元型的指標變數,指標變數用來儲存地址,所以將常量區中Frank , Duck ,iPhone 的開始地址拷貝到對應的變數中通過指標操作操作的是常量區的內容.
char * a [3] = {"Frank","Duck","iPhone"};
////常量區的內容不可更改.