C 結構體小結

來源:互聯網
上載者:User

標籤:style   blog   http   java   color   使用   

C 結構體小結

關於結構體的聲明:

# include <stdio.h>//第一種方式struct Student{    int age;    float score;    char sex;};//第二種方式struct Student2{    int age;    float score;    char sex;} st2;//第三種方式struct {    int age;    float score;    char sex;} st3;int main(void){    struct Student st = {80, 66.6, ‘F‘};        return 0;}

 

結構體變數的賦值和初始化:

1.

# include <stdio.h>//第一種方式struct Student{    int age;    float score;    char sex;};int main(void){    struct Student st = {80, 66.6, ‘F‘}; //初始化  定義的同時賦初值    struct Student st2;    st2.age = 10;    st2.score = 88;    st2.sex = ‘F‘;    printf("%d %f %c\n", st.age, st.score, st.sex);    printf("%d %f %c\n", st2.age, st2.score, st2.sex);        return 0;}

2.

# include <stdio.h>//第一種方式struct Student{    int age;    float score;    char sex;};int main(void){    struct Student st = {80, 66.6F, ‘F‘}; //初始化  定義的同時賦初值    struct Student * pst = &st;  //&st不能改成st    pst->age = 88;//第二種方式    st.score = 66.6f; //第一種方式  66.6在C語言中預設是double類型,如果希望一個實數是float類型,則必須在末尾加f或F, 因此66.6是double, 66.6f或66.6F是float    printf("%d %f\n", st.age, pst->score);        return 0;}

 

 

引用 : http://www.cnblogs.com/ligongzi/archive/2012/08/24/2654448.html

struct Student{    char name[20];    char sex;    int age;    char addr[40];};/*然後定義一個Student 類型的 student變數*/struct Student student;

也許是我受了Java影響,我一度寫成這樣:

struct man{    int age = 30;    int score = 80;};int main(){    man man1  = {20,70};}

  結果是鐵定編譯通過不了的。因為這是我自創的聲明帶預設值的結構體,編譯器沒見過。

結構體成員變數在聲明中是不能賦值的。

 

  正確的寫法是:

struct Man{    int age; //這樣就好了    int score;};int main(){   struct Man man1 = {30,80};}

 定義結構體的時候每次都要寫struct 顯然是煩瑣了,

精鍊的C語言用來typedef來方便定義使用:

typedef struct Man{    int age;    int score;}man;int main(){    man man1 = {20,80};    man man2 = {30,70};    man man3 = {40,99};    printf("%d\n",man1.age);    printf("%d\n",man3.score);}

這樣一來大家想召喚多少個“男人”都沒有問題。另外有一個極端一點的問題,聲明結構體名和定義結構體變數名能不能一樣?我們可以試試看:

typedef struct man{    int age;    int score;}man;  //還叫man,有意見嗎?int main(){    man man = {40,50};//還叫man,有問題嗎?    printf("%d\t%d\n",man.age,man.score);}

編譯運行都是沒有問題的。不信自己去試試看。

   然後我們來討論重點吧:

struct Student{    char name[20];    char sex;    int age;    char addr[40];};/*然後定義一個Student 類型的 student變數*/struct Student student;

 

給定義的結構中name和age賦值, 可以用下面語句:

    

     strcpy(student->name, "jack");     student->age=21;     student->name就是(*student).name的縮寫形式。

 

 

    需要指出的是結構指標是指向結構的一個指標, 是結構中第一個成員的首地址, 因此在使用之前應該對結構指標初始化, 即分配整個結構長度的位元組空間, 這可用下面函數完成, 仍以上例來說明如下:

   

  student=(struct string*)malloc(size of (struct string));

 

    size of (struct string)自動求取string結構的位元組長度, malloc() 函數定義了一個大小為結構長度的記憶體地區, 然後將其詐地址作為結構指標返回。  

    注意:

    結構變數名不是指向該結構的地址, 這與數組名的含義不同,  因此若需要求結構中第一個成員的首地址應該是&[結構變數名]。

 

 demo.

/*    2009年11月24日9:17:43    樣本:        發送地址還是發送內容    目的:        指標的優點之一:            快速的傳遞資料,            耗用記憶體小            執行速度快*/# include <stdio.h># include <string.h>struct Student{    int age;    char sex;    char name[100];}; //分號不能省void InputStudent(struct Student *);void OutputStudent(struct Student *);int main(void){    struct Student st ;  //15行    //printf("%d\n", sizeof(st));    InputStudent(&st); //對結構體變數輸入  必鬚髮送st的地址    OutputStudent(&st); //對結構體變數輸出  可以發送st的地址也可以直接發送st的內容 但為了減少記憶體的耗費,也為了提高執行速度,推薦發送地址    return 0;}void OutputStudent(struct Student *pst){    printf("%d %c %s\n", pst->age, pst->sex, pst->name);}void InputStudent(struct Student * pstu) //pstu只佔4個位元組{    (*pstu).age = 10;    strcpy(pstu->name, "張三");    pstu->sex = ‘F‘;    }/*//本函數無法修改主函數15行st的值 所以本函數是錯誤的void InputStudent(struct Student stu){    stu.age = 10;    strcpy(stu.name, "張三");  //不能寫成 stu.name = "張三";    stu.sex = ‘F‘;}*/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.