程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c語言中結構體指針

c語言中結構體指針

編輯:關於C語言

c語言中結構體指針


1、指向結構體的指針變量:
C 語言中->是一個整體,它是用於指向結構體,假設我們在程序中定義了一個結構體,然後聲明一個指針變量指向這個結構體,那麼我們要用指針取出結構體中的數據,就要用到指向運算符“->”.


舉例說明:
struct SunLL
{
int a;
int b;
int c;
};

struct SunLL * p; //定義結構體指針
struct SunLL A = {1,2,3}; //定義一個SunLL類型的變量A

int x; //定義一個變量x
p = &A ; //讓p指向A
x = p->a; //等價於 x=(*p).a (*p)表示p指向的結構體變量
//這句話的意思就是取出p所指向的結構體中包含的數據項a賦值給x
//由於此時p指向A,因而 p->a == A.a,也就是1

2、指向結構體數組的指針變量:
指向結構體的指針變量也可以指向結構體數組及其元素。


如果程序如下:
struct SunLL *p,sun[3];
p = sun;
如果假定sun[0]的地址是1000,指針變量p指向結構體數組sun的首地址,由於size of(struct SunLL)的值是6,每個結構體元素占內存空間6個字節,因此p+1指向地址1006,p+2指向地址1012.

使用指針變量指向結構體變量或結構體數組時,應注意運算符的優先級,在c語言中() [ ] -> .四個優先級相同,具有最高的優先級,其次是”*“ ”++“ ”--“ ”&“四個相同優先級的運算符。如:++P->a的表達式等價於++(p->a)

(++p)->a先計算++p,p指向sun[1];
P++->a;則表達式等價於(p++)->a;
p->a++的表達式等價於(p->a)++;

3、結構體作為函數參數與結構體指針作為函數參數


舉例1
struct st
{
int a;
char b;
};

fun(struct st bc)
{
bc.a+=5;
bc.b='A';
printf(%d,%c ,bc.a,bc.b);
}

main()
{
struct st bl;
bl.a=3;
bl.b=c;
fun(bl);
printf(%d,%c ,bl.a,bl.b);
}

運行結果為:8,A 3,c

舉例2:
struct st
{
int a;
char b;
};

fun(struct st *bp)
{
bp->a+=5;
bp->b='A';
printf(%d,%c ,bc.a,bc.b);
}

main()
{
struct st bl;
bl.a=3;
bl.b=c;
fun(&bl);
printf(%d,%c ,bl.a,bl.b);
}

運行結果為:8,A 8,A

總結:
將結構體變量作為函數參數,是將實參值傳遞給形參,屬於值傳遞。將結構體所有參數傳遞給形參使用,但本身的值不會改變。將指向結構體變量的指針作為實參進行傳遞時,是將結構體變量的地址傳遞給形參,屬於地址傳遞,會改變實際結構體變量的成員值的。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved