指針訪問結構體成員的問題


今天給大一的小孩講結構體,講到指向結構體的指針的時候,突然一個小孩提出了一個問題:指向結構體成員的指針p加1后指向誰?當時懵了,想寫個程序驗證一下,腦子一片空白。好像提問題的那個小孩聽明白的,就干脆讓他寫吧。哈哈,他還挺厲害的,他寫的代碼大體是這樣的:

#include<stdio.h>
struct data
{
     int a;
     int b;
     int c;
};
int main()
{
     struct data a[ 3]={
        { 11, 12, 13},
        { 21, 22, 23},
        { 31, 32, 33}
    };
     int *p=&a[ 0].c; // *p=13
    p++;
    printf( " %d\n ",*p);

大家認為會輸出什么?是23嗎?

出人意料,輸出的結果是21

我是這么解釋的:因為p是指向int *型的,所以指針后移一個int單位,或者說后移四個存儲單元,又因為結構體是連續存儲的,所以后移之后就指向下一個結構體的第一個元素,也就是21。如果我們將int a;改為double a;輸出為0,這就驗證了我的觀點 ,同樣,如果將int a;改為char a;的話,這樣就會和后面的數據混起來,輸出為2293525,可以認為無效數字。

所以,一般情況下我們只用只指向結構體的指針,而不用指向結構體成員的指針。


免責聲明!

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



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