C語言 指標(二)指標型別的強轉

2021-09-17 01:17:00 字數 1441 閱讀 9864

先來看一段**

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...