基于結(jié)構(gòu)體與指針的詳解
更新時間:2013年05月16日 12:16:35 作者:
本篇文章是對結(jié)構(gòu)體與指針進行了詳細的分析介紹,需要的朋友參考下
結(jié)構(gòu)指針變量:結(jié)構(gòu)指針變量的說明和使用一個指針變量用來指向一個結(jié)構(gòu)變量時
結(jié)構(gòu)指針變量中的值是所指向的結(jié)構(gòu)變量的首地址。通過結(jié)構(gòu)指針即可訪問該結(jié)構(gòu)變量,這與數(shù)組元素的指針和函數(shù)指針的情況是相同的。
結(jié)構(gòu)指針變量說明的一般形式為:
struct 結(jié)構(gòu)名 * 結(jié)構(gòu)指針變量名
例如: struct stu *pstu;
其訪問的一般形式為:
(*結(jié)構(gòu)指針變量).成員名 : (*pstu).num
或為:
結(jié)構(gòu)指針變量->成員名 :pstu->num
應(yīng)該注意(*pstu)兩側(cè)的括號不可少, 因為成員符“.”的優(yōu)先級高于“*”。如去掉括號寫作*pstu.num則等效于*(pstu.num),這樣,意義就完全不對了。
結(jié)構(gòu)變量.成員名
(*結(jié)構(gòu)指針變量).成員名
結(jié)構(gòu)指針變量->成員名
這三種用于表示結(jié)構(gòu)成員的形式是完全等效的。
結(jié)構(gòu)數(shù)組指針變量:結(jié)構(gòu)指針變量可以指向一個結(jié)構(gòu)數(shù)組, 這時結(jié)構(gòu)指針變量的值是整個結(jié)構(gòu)數(shù)組的首地址。 結(jié)構(gòu)指針變量也可指向結(jié)構(gòu)數(shù)組的一個元素,這時結(jié)構(gòu)指針變量的值是該結(jié)構(gòu)數(shù)組元素的首地址。
設(shè)ps為指向結(jié)構(gòu)數(shù)組的指針變量,則ps也指向該結(jié)構(gòu)數(shù)組的0號元素,ps+1指向1號元素,ps+i則指向i號元素。 這與普通數(shù)組的情況是一致的。
#include <stdio.h>
int main(void)
{
int i;
struct student
{
long int num;
int age;
char* name;
}st[3]={{198,19,"zhangsan"}, {199,18,"lisi"},{200,19,"wangwu"}};
struct student* p;
p=st;
printf("/n/n NO. age name /n");
for( ;p<=st+2;p++)
printf(" %ld %d %s/n",p->num,p->age,p->name);
getch();
printf("/n/n NO. age name /n");
for( p=st ;p<=st+2;p++)
printf(" %ld %d %s/n",(*p).num,(*p).age,(*p).name);
getch();
return 0;
}
結(jié)構(gòu)指針變量中的值是所指向的結(jié)構(gòu)變量的首地址。通過結(jié)構(gòu)指針即可訪問該結(jié)構(gòu)變量,這與數(shù)組元素的指針和函數(shù)指針的情況是相同的。
結(jié)構(gòu)指針變量說明的一般形式為:
struct 結(jié)構(gòu)名 * 結(jié)構(gòu)指針變量名
例如: struct stu *pstu;
其訪問的一般形式為:
(*結(jié)構(gòu)指針變量).成員名 : (*pstu).num
或為:
結(jié)構(gòu)指針變量->成員名 :pstu->num
應(yīng)該注意(*pstu)兩側(cè)的括號不可少, 因為成員符“.”的優(yōu)先級高于“*”。如去掉括號寫作*pstu.num則等效于*(pstu.num),這樣,意義就完全不對了。
結(jié)構(gòu)變量.成員名
(*結(jié)構(gòu)指針變量).成員名
結(jié)構(gòu)指針變量->成員名
這三種用于表示結(jié)構(gòu)成員的形式是完全等效的。
結(jié)構(gòu)數(shù)組指針變量:結(jié)構(gòu)指針變量可以指向一個結(jié)構(gòu)數(shù)組, 這時結(jié)構(gòu)指針變量的值是整個結(jié)構(gòu)數(shù)組的首地址。 結(jié)構(gòu)指針變量也可指向結(jié)構(gòu)數(shù)組的一個元素,這時結(jié)構(gòu)指針變量的值是該結(jié)構(gòu)數(shù)組元素的首地址。
設(shè)ps為指向結(jié)構(gòu)數(shù)組的指針變量,則ps也指向該結(jié)構(gòu)數(shù)組的0號元素,ps+1指向1號元素,ps+i則指向i號元素。 這與普通數(shù)組的情況是一致的。
復(fù)制代碼 代碼如下:
#include <stdio.h>
int main(void)
{
int i;
struct student
{
long int num;
int age;
char* name;
}st[3]={{198,19,"zhangsan"}, {199,18,"lisi"},{200,19,"wangwu"}};
struct student* p;
p=st;
printf("/n/n NO. age name /n");
for( ;p<=st+2;p++)
printf(" %ld %d %s/n",p->num,p->age,p->name);
getch();
printf("/n/n NO. age name /n");
for( p=st ;p<=st+2;p++)
printf(" %ld %d %s/n",(*p).num,(*p).age,(*p).name);
getch();
return 0;
}
您可能感興趣的文章:
- C++中指向結(jié)構(gòu)體變量的指針
- 結(jié)構(gòu)體類型數(shù)據(jù)作為函數(shù)參數(shù)(三種方法)
- C/C++語言中結(jié)構(gòu)體的內(nèi)存分配小例子
- 復(fù)數(shù)乘法中的結(jié)構(gòu)體賦值實現(xiàn)代碼
- C與C++中結(jié)構(gòu)體的區(qū)別
- C#中使用反射獲取結(jié)構(gòu)體實例及思路
- 淺析C++中結(jié)構(gòu)體的定義、初始化和引用
- 淺談C語言中結(jié)構(gòu)體的初始化
- 深入分析C語言中結(jié)構(gòu)體指針的定義與引用詳解
- 解析結(jié)構(gòu)體的定義及使用詳解
- C++結(jié)構(gòu)體數(shù)組詳細解析
相關(guān)文章
C++使用JsonCpp庫操作json格式數(shù)據(jù)示例
這篇文章主要介紹了C++使用JsonCpp庫操作json格式數(shù)據(jù),結(jié)合實例形式詳細分析了JsonCpp庫的下載及C++使用JsonCpp庫對json格式數(shù)據(jù)序列化相關(guān)操作技巧,需要的朋友可以參考下2017-06-06C語言模擬內(nèi)存函數(shù)分析之mencpy與memmove
這篇文章主要介紹了C語言詳解如何模擬內(nèi)存函數(shù),用到了mencpy與memmove兩個函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-03-03C++ CryptoPP使用AES實現(xiàn)加解密詳解
Crypto++ (CryptoPP) 是一個用于密碼學(xué)和加密的 C++ 庫,提供了大量的密碼學(xué)算法和功能,這篇文章主要為大家介紹了C++ CryptoPP如何使用AES實現(xiàn)加解密,需要的可以參考下2023-11-11