指針類型和指向的數據類型


 

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
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM