先來看一段**
int main()
; int n = sizeof(ar) / sizeof(ar[0]);
int *p = ar;
for (int i = 0; i < n; i++)
cout << endl;
return 0;
}
通過執行結果我們會發現輸出結果之間相差位址相差4,剛好符合了int的4個位元組,如果把int換成double、char呢?結果會是什麼?
int型指標加一加四個位元組,char型別加一加乙個位元組,double型別加一加八個位元組
int *p = ar;
p = p + 1;
等價於
int *p = ar;
p = p + sizeof(int)*1;
其他各種型別與此相同。
下面開始正式內容
int *p = 10;
char *a = (char*)p
這段**就是最基本的指標的強制轉換(一定要對每個型別的位元組大小有基本了解)
練習題:開闢乙個buffer[20],buffer為20個位元組的空間,要求利用指標的強轉在裡面儲存乙個遊戲玩家的實時資訊,並解析,資訊包括,玩家的角色等級,揹包金錢數量,玩家的裝備等級abcd
使用三個指標:
void game()
; char *p = buffer;
*p = 'a';
p = p + 1;
int *p1 = (int *)p;
*p1 = 15;
p1 += 1;
double *p2 = (double *)p1;
*p2 = 12.302;
printf("%c\n", *(p-1));
printf("%d\n", *(p1-1));
printf("%f\n", *p2);
使用乙個指標高階使用
void game1()
; char *p = buffer;
*p = 'a';
*((int *)(p + 1)) = 15;
*((double*)( (int *)(p + 1) + 1)) = 15;
printf("char value:%c\n", *((char*)buffer));
printf("int value:%d\n", *((int*)(buffer + sizeof(char))));
printf("float value:%f\n", *((double *)(buffer + sizeof(int)+sizeof(char))));
C語言 二 指標
一 指標概述 1.簡介 2.初始化 1 先定義後初始化 int a 10 int p p a 2 定義並初始化 int a 10 int p a 備註 在資料型別後,變數名稱前的 是乙個說明符,用來說明該變數是乙個指標變數。如果前面沒有資料型別,如 p,這裡的 是乙個指標運算子,用來取出指標變數所指...
C語言認識(二)指標
指標 int main p認為是一級指標 p存的是a的位址 指標又稱為間接訪問符。typedef查詢一下。基本變數可以進行混合運算。混合型別 陣列 指標等 基本型別不能和混合型別進行運算。無論是 int p 還是 char p1 double p2 指標的大小是固定的,由cpu大小決定。32bit電...
c語言基礎(二)指標篇
定義乙個int型別的變數i int i 10 定義乙個int型別的一級指標變數 int p 把i對應的位址賦給p變數 p i 指標取值 p 把p變數對應的位址的值取出來 printf p d p 首先我們定義的指標變數p,其實p就是用來存放位址的,我們把i的位址賦給p,那麼p的值其實就是i的位址,p...