C語言中的結構體指標
結構體指標的概念概念:結構體變數的地址,指向某個結構體變數(同時也是結構體變數中第一個元素的地址)結構體指標變數中的值是所指向結構體變數的地址我們可以透過結構體變數可以指向結構體中包含的一些成員
定義一個結構體變數:struct 結構體名 *結構體指標變數名;
如:struct address *addr;
結構體指標變數初始化:
結構體指標變數名 = &結構體變數;
或者:結構體指標變數名 = &(結構體變數.第一個成員)
注意:結構體指標必須要初始化以後才能夠繼續使用
結構體變數成員的訪問結構體指標 ->成員名;如addr->country;
(*結構體指標).成員名;(*addr).country;//很少去進行使用,注意必須去使用(),,因為.優先順序大於*
結構體變數.成員名 stu.name
注意:如果是結構體指標的話,它是可以指向自己的(引用自己)
結構體指標作為函式引數C語言中結構體傳遞引數,傳遞的時間,和空間都是很大的,因為其在呼叫的時候都是複製呼叫,效率是嚴重降低,因此結構體作為引數傳遞的話,此時對於效率一塊,將大大的節省,嚴重降低了程式的效率
結構體指標作為函式引數傳遞,那麼會有很大最佳化:
(實參傳向形參的只是一個地址)out_student(struct student *stup);
//將結構體變數的地址傳入進去
結構體陣列指標指向結構體陣列的指標1:結構體指標可以指向一個結構體陣列,結構體指標變數的值是整個結構體陣列的首地址
struct student stus[] = {stu,stu2};
struct student *stup2 = stus;
2:結構體指標可以指向一個結構體陣列中的變數,這時結構體指標變數的值就是該結構體陣列元素的地址3:一個結構體指標雖然可以來訪問結構體變數或結構體陣列,但是不能指向結構體的成員
####結構體的指標陣列結構體指標陣列的使用對記憶體開銷會大大降低
struct student *stups [] = {stup1,&stu2};
out_students(stups,2);
結構體指標的自引用一個結構體內部包含一個指向該結構體本身的指標(必須是結構體指標)struct Self{int a;int b;struct Self *s; //必須是結構體指標,指向自身}
如何使用指標指向結構體中的下一個元素,可參考以下示例程式:
#include <stdio.h>
struct St_Test{
int t1;
int t2;
int t3;
int t4;
};
int main() {
struct St_Test St_Test_Example;
int *p ;
p = (int*) &St_Test_Example;
St_Test_Example.t1 = 11;
St_Test_Example.t2 = 22;
St_Test_Example.t3 = 33;
St_Test_Example.t4 = 44;
printf("%d\n",*(p+0));
printf("%d\n",*(p+1));
printf("%d\n",*(p+2));
printf("%d\n",*(p+3));
}
輸出結果:
11
22
33
44
C語言中的結構體指標
結構體指標概念結構體變數成員訪問結構體指標作為函式引數結構體陣列指標5.結構體指標陣列結構體的自引用與不完全宣告結構體指標的概念概念:結構體變數的地址,指向某個結構體變數(同時也是結構體變數中第一個元素的地址)結構體指標變數中的值是所指向結構體變數的地址我們可以透過結構體變數可以指向結構體中包含的一些成員
定義一個結構體變數:struct 結構體名 *結構體指標變數名;
如:struct address *addr;
結構體指標變數初始化:
結構體指標變數名 = &結構體變數;
或者:結構體指標變數名 = &(結構體變數.第一個成員)
注意:結構體指標必須要初始化以後才能夠繼續使用
結構體變數成員的訪問結構體指標 ->成員名;如addr->country;
(*結構體指標).成員名;(*addr).country;//很少去進行使用,注意必須去使用(),,因為.優先順序大於*
結構體變數.成員名 stu.name
注意:如果是結構體指標的話,它是可以指向自己的(引用自己)
結構體指標作為函式引數C語言中結構體傳遞引數,傳遞的時間,和空間都是很大的,因為其在呼叫的時候都是複製呼叫,效率是嚴重降低,因此結構體作為引數傳遞的話,此時對於效率一塊,將大大的節省,嚴重降低了程式的效率
結構體指標作為函式引數傳遞,那麼會有很大最佳化:
(實參傳向形參的只是一個地址)out_student(struct student *stup);
//將結構體變數的地址傳入進去
結構體陣列指標指向結構體陣列的指標1:結構體指標可以指向一個結構體陣列,結構體指標變數的值是整個結構體陣列的首地址
struct student stus[] = {stu,stu2};
struct student *stup2 = stus;
2:結構體指標可以指向一個結構體陣列中的變數,這時結構體指標變數的值就是該結構體陣列元素的地址3:一個結構體指標雖然可以來訪問結構體變數或結構體陣列,但是不能指向結構體的成員
####結構體的指標陣列結構體指標陣列的使用對記憶體開銷會大大降低
struct student *stups [] = {stup1,&stu2};
out_students(stups,2);
結構體指標的自引用一個結構體內部包含一個指向該結構體本身的指標(必須是結構體指標)struct Self{int a;int b;struct Self *s; //必須是結構體指標,指向自身}
如何使用指標指向結構體中的下一個元素,可參考以下示例程式:
#include <stdio.h>
struct St_Test{
int t1;
int t2;
int t3;
int t4;
};
int main() {
struct St_Test St_Test_Example;
int *p ;
p = (int*) &St_Test_Example;
St_Test_Example.t1 = 11;
St_Test_Example.t2 = 22;
St_Test_Example.t3 = 33;
St_Test_Example.t4 = 44;
printf("%d\n",*(p+0));
printf("%d\n",*(p+1));
printf("%d\n",*(p+2));
printf("%d\n",*(p+3));
}
輸出結果:
11
22
33
44