亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

C 語言基礎(chǔ)教程

C 語言流程控制

C 語言函數(shù)

C 語言數(shù)組

C 語言指針

C 語言字符串

C 語言結(jié)構(gòu)體

C 語言文件

C 其他

C 語言參考手冊(cè)

C 結(jié)構(gòu)體和指針

在本教程中,您將學(xué)習(xí)在C語言編程中使用指針訪問結(jié)構(gòu)的成員。您還將學(xué)習(xí)動(dòng)態(tài)分配結(jié)構(gòu)類型的內(nèi)存。

在了解如何將指針與結(jié)構(gòu)一起使用之前,請(qǐng)務(wù)必閱讀以下教程:

C 指向結(jié)構(gòu)的指針

這是創(chuàng)建結(jié)構(gòu)指針的方法。

struct name {
    member1;
    member2;
    .
    .
};

int main()
{
    struct name *ptr, Harry;
}

在這里,ptr是一個(gè)指向struct的指針。

示例:使用指針訪問成員

要使用指針訪問結(jié)構(gòu)的成員,我們使用->運(yùn)算符。

#include <stdio.h>
struct person
{
   int age;
   float weight;
};

int main()
{
    struct person *personPtr, person1;
    personPtr = &person1;   

    printf("輸入年齡: ");
    scanf("%d", &personPtr->age);

    printf("輸入體重: ");
    scanf("%f", &personPtr->weight);

    printf("顯示:\n");
    printf("年齡: %d\n", personPtr->age);
    printf("體重: %f", personPtr->weight);

    return 0;
}

輸出結(jié)果

輸入年齡: 25
輸入體重: 55
顯示:
年齡: 25
體重: 55.000000

在此示例中,使用personPtr =&person1;將person1的地址存儲(chǔ)在personPtr指針中。

現(xiàn)在,您可以使用personPtr指針訪問person1的成員。

順便說說,

  • personPtr->age 等同于 (*personPtr).age

  • personPtr->weight 等同于 (*personPtr).weight

結(jié)構(gòu)的動(dòng)態(tài)內(nèi)存分配

在繼續(xù)本節(jié)之前,建議您檢查C動(dòng)態(tài)內(nèi)存分配

有時(shí),您聲明的結(jié)構(gòu)變量的數(shù)量可能不足。您可能需要在運(yùn)行時(shí)分配內(nèi)存。這是您可以在C語言編程中實(shí)現(xiàn)此目標(biāo)的方法。

示例:結(jié)構(gòu)的動(dòng)態(tài)內(nèi)存分配

#include <stdio.h>
#include <stdlib.h>
struct person {
   int age;
   float weight;
   char name[30];
};

int main()
{
   struct person *ptr;
   int i, n;

   printf("輸入人數(shù): ");
   scanf("%d", &n);

   //為n個(gè)struct person分配內(nèi)存
   ptr = (struct person*) malloc(n * sizeof(struct person));

   for(i = 0; i < n; ++i)
   {
       printf("分別輸入姓名和年齡: ");

         //要訪問第一個(gè)struct person的成員
         //可以使用 ptr->name 和 ptr->age

        //要訪問第二個(gè)struct person的成員,
        //使用(ptr + 1)->名稱和(ptr + 1)-> age
       scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
   }

   printf("顯示信息:\n");
   for(i = 0; i < n; ++i)
       printf("姓名: %s\t年齡: %d\n", (ptr+i)->name, (ptr+i)->age);

   return 0;
}

運(yùn)行該程序時(shí),輸出為:

輸入人數(shù):  2
分別輸入姓名和年齡:  Harry 24
分別輸入姓名和年齡:  Gary 32
顯示信息:
姓名: Harry	年齡: 24
姓名: Gary	年齡: 32

在上面的實(shí)例中,在用戶輸入n的地方創(chuàng)建了n個(gè)struct變量。

要為n個(gè)struct person分配內(nèi)存,我們使用,

ptr = (struct person*) malloc(n * sizeof(struct person));

然后,我們使用ptr指針訪問person的元素。