C語言中 指針與結構體


  

 

 

就像數組一樣,指向結構體的指針存儲了結構體第一個元素的內存地址。與數組指針一樣,結構體的指針必須聲明和結構體類型保持一致,或者聲明為void類型。

1
2
3
4
5
6
7
8
9
10
11
12
13
struct person {
   int age;
   char *name;
};
struct person first;
struct person *ptr;
 
first.age = 21;
char *fullname = "full name" ;
first.name = fullname;
ptr = &first;
 
printf ( "age=%d, name=%s\n" , first.age, ptr->name);

第1至6行聲明了一個person結構體,一個變量指向了一個person結構體和指向person結構體的指針。第8行為age成員賦了一個int值。第9至10行我們聲明了一個char指針並賦值給一個char數組並賦值給結構體name成員。第11行我們把一個person結構體引用賦值給結構體變量。

第13行我們打印了結構體實例的age和name。這里需要注意兩個不同的符號,’.’ 和 ‘->’ 。結構體實例可以通過使用 ‘.’ 符號訪問age變量。對於結構體實例的指針,我們可以通過 ‘->’ 符號訪問name變量。也可以同樣通過(*ptr).name來訪問name變量。

指針和結構類型的關系 
可以聲明一個指向結構類型對象的指針。 
  例十一: 
structMyStruct 

 inta; 
 intb; 
 intc; 

MyStructss={20,30,40};
//聲明了結構對象ss,並把ss的三個成員初始化為20,30和40。 
MyStruct*ptr=&ss;
//聲明了一個指向結構對象ss的指針。它的類型是MyStruct*,它指向的類型是MyStruct。 
int*pstr=(int*)&ss;
//聲明了一個指向結構對象ss的指針。但是它的類型和它指向的類型和ptr是不同的。
  請問怎樣通過指針ptr來訪問ss的三個成員變量? 
  答案: 
ptr->a; 
ptr->b; 
ptr->c; 


免責聲明!

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



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