
1、指針類型和指向的數據類型不同時
#include <stdio.h>
//指針除了指明地址以外,還指明了類型,類型決定了數據的大小和數據的解析方式
int main() {
char ch='a';
int i= 100000;
double d= 1444.54;
float f=123.4f;
char * pch = &ch;
int *pi = &i;
double *pd = &d;
float *pf =&i;
pch =pi; //指針char類型字節數小於int類型 ,*pch漏讀
//pch是char類型的指針,它會從&ch開始的地址往后讀char指針類型長度的數據,也就是1個字節的數據,而pi的數據有四個字節,有3個字節的數據讀不到
pd =pi; //指針double類型字節數大於int 類型, *pd多讀
//pd是double類型的指針,它會從&pd開始的地址往后讀double指針類型長度的數據,也就是8個字節的數據,而pi的數據有四個字節,會導致往后多讀4個字節的垃圾數據
pf=pi; //指針float類型字節數等於int 類型, 不會多讀或漏讀,但是同樣的二進制數,int和float的解析方式不一樣,也會導致*pf讀的內容錯誤
printf("%c,%f,%f\n",*pch,*pd,*pf);
//結論:指針類型盡量一致,如果不一致,或大或小都有問題
//不同數據類型,大小不一樣,解析方式也會不一樣,即使地址相同,大小相同
return 0;
pch =(char *)0x645afed; //強制類型轉換,指明只能從0x645afed往后讀取char類型個字節
}
2、指針類型和指向的數據類型相同時
#include <stdio.h>
//用於數據通信,共用一個變量
void main() {
int num =5;
int *p1 =#
int *p2 =p1;
printf("%d,%d,%d\n",num,*p1,*p2); //5,5,5
*p1 = 10;
printf("%d,%d,%d\n",num,*p1,*p2); //10,10,10
*p2 =100;
printf("%d,%d,%d\n",num,*p1,*p2); //100,100,100
}
