C語言 結構體指標

2021-06-22 21:39:14 字數 3028 閱讀 3552

-----------------------------asp.net+unity開發、.net培訓、期待與您交流!-------------------------

一.結構體

1.什麼是結構體; 當

乙個整體

由多個資料構成時,我們可以用陣列來表示這個整體,但是陣列內部的每乙個元素都必須是相同型別的資料。在實際應用中,我們通常需要由不同型別的資料來構成乙個整體,比如學生這個整體可以由姓名、年齡、身高等資料構成,那麼我們就要用到結構體;

2.定義

struct 結構體名 ;

例如:  struct student;

結構體實際上就行當於我們定義乙個變數型別;

3.結構體變數名

struct person;

struct person p;   先定義結構體型別,在定義變數名;

struct personp;  定義結構體同時定義變數;

structp;   省略結構體型別名,直接定義變數名。

4.結構體注意

結構體是可以包含結構體的;

定義結構體型別時候是沒有分配儲存空間的,就像int型別沒有儲存空間一樣,只有定義結構體變數時才會分配空間儲存;

結構體儲存方式是按成員名依次排列的;

結構體如果型別相同,那麼所佔空間為其成員型別之和;如果不相同,那麼為佔最大儲存空間的型別的倍數;

5.結構體初始化

struct person;

struct person p = ;定義變數的同時初始化;

6.結構體的使用

struct person;

struct person p ;

想訪問年齡  p.age = 17;

struct person;

struct person p = ;

struct person pp = p ; 同一型別的結構體中可以相互賦值;

二.結構體陣列

1.定義,和結構體一樣3種方式;

struct student;

struct student stu[10];

struct studentstup[10];

structstup[10];

2.初始化

struct student;

struct student  stu[2] = ,};

三.結構體作為函式引數

將結構體變數作為函式引數進行傳遞時,其實傳遞的是全部成員的值,也就是將實參中成員的值一一賦值給對應的形參成員。因此,形參的改變不會影響到實參。

四.指標

1.定義

指標向的資料型別 * 指標變數名;

char *p;   int *pp;    float *ppp;

2.指標的賦值

int a = 10;

int *p ;

p = &a;  先定義,再賦值;

int a = 10;

int *p1 = &a; 定義的同時賦值;

3.改值

int a = 10;

int *p = &a;

*p = 5;  將a的值變為5 了;

指標一定要初始化,否則是乙個野指標,威害很大;

五.指標與陣列

1.指標與一位陣列

陣列是一塊連續的記憶體,陣列元素的下標就是該元素的位置相對與陣列起始位址的偏移量

因為第乙個元素的位址與陣列名位址是相同的,所以便宜量是0陣列就相當於乙個指標,陣列的變數名就是位址;

int num = ;

int *p = num;

遍歷陣列:

for (int i = 0;i < 3;i++)

p + i,將不會改變變數的位址;

p++   將改變變數的位址;

2.陣列名和指標的區別

陣列的位址還是陣列的位址,指標的位址變數的位址不是指標變數裡存放的位址

陣列變數的指向不可以改變

指標變數就是就是用來存放位址變數,系統為其開闢了儲存空間,所以指標變數中位址可以任意改變,但是系統沒有陣列變數分配儲存空間,當系統編譯後所有出現陣列名的地方都會被替換成該陣列的首位址,所以你不可改變陣列變數的指向。

六.指標與字串

以前我們是先定義字串,再將字串位址給指標:

char name = "sl";   char *p = name;

而我們還可以:                              

char *p1 = "sl";

兩種方式的區別:  第乙個定義的是字串變數;第二個定義的是字串常量,你不能改變他; 

七.指標與函式

1.返回指標的函式

指標也是c語言中的一種資料型別,因此乙個函式的返回值肯定可以是指標型別的   

返回指標的函式的一般形式為:型別名 * 函式名(引數列表)

2.函式指標

定義:指向函式的指標稱為函式指標,也就存放函式位址的變數就是函式指標變數;

格式: 返回值型別 (*函式指標名稱)  (引數型別,引數型別) 

例如:  int sum(int a,int b)    指標 int (*point)(int,int)

初始化;    point = sum;

作用:將函式作為引數在函式間傳遞

八.指標與結構體

定義:結構體指標變數的定義形式:

struct

結構體名稱 *指標變數名

例如:   struct person; 

struct person stu = ;

struct person *p ; 定義了乙個結構體指標;

p = &stu;           將結構體位址給指標;

訪問成員:

stu.age    stu.name

(*p).age    (*p).name

p->age      p->name  最常用的方式

----------------------------

-asp.net+unity開發、.net培訓、期待與您交流!

-------------------------

結構體指標,C語言結構體指標詳解

結構體指標,可細分為指向結構體變數的指標和指向結構體陣列的指標。前面我們通過 結構體變數名.成員名 的方式引用結構體變數中的成員,除了這種方法之外還可以使用指標。前面講過,student1 表示結構體變數 student1 的首位址,即 student1 第乙個項的位址。如果定義乙個指標變數 p 指...

C語言 結構體指標

指向結構體物件的指標變數即可以指向結構體變數,也可指向結構體陣列中的元素。指標變數的基型別必須與結構體變數的型別相同。如 struct student pt pt可以指向struct student型別的變數或陣列元素。典例 通過結構體變數的指標變數輸出結構體變數成員中的成員的資訊。解題思路 1 怎...

C語言結構體指標

在使用指標值得注意的是對結構體指標的使用 例如 struct bookmessage 定義乙個指標引數的結構體 void importmssage bookmessage pbook 那麼如何用該指標輸出該資訊呢?pbook name vs pbook id?void importmssage bo...