C 語言基礎教程

C 語言流程控制

C 語言函數(shù)

C 語言數(shù)組

C 語言指針

C 語言字符串

C 語言結構體

C 語言文件

C 其他

C 語言參考手冊

C 結構體和指針

在本教程中,您將學習在C語言編程中使用指針訪問結構的成員。您還將學習動態(tài)分配結構類型的內存。

在了解如何將指針與結構一起使用之前,請務必閱讀以下教程:

C 指向結構的指針

這是創(chuàng)建結構指針的方法。

struct name {
    member1;
    member2;
    .
    .
};

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

在這里,ptr是一個指向struct的指針。

示例:使用指針訪問成員

要使用指針訪問結構的成員,我們使用->運算符。

#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;
}

輸出結果

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

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

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

順便說說,

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

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

結構的動態(tài)內存分配

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

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

示例:結構的動態(tà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個struct person分配內存
   ptr = (struct person*) malloc(n * sizeof(struct person));

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

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

        //要訪問第二個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;
}

運行該程序時,輸出為:

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

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

要為n個struct person分配內存,我們使用,

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

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

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清