Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Giải thích cấp phát bộ nhớ động cho con trỏ cấu trúc trong C


Con trỏ tới cấu trúc giữ địa chỉ của toàn bộ cấu trúc.

Nó được dùng để tạo các cấu trúc dữ liệu phức tạp như danh sách liên kết, cây, đồ thị, v.v.

Các thành viên của cấu trúc có thể được truy cập bằng toán tử đặc biệt gọi là toán tử mũi tên (->).

Khai báo

Khai báo cho con trỏ tới cấu trúc trong C:

struct tagname *ptr;

Ví dụ: struct student *s;

Truy cập

Cách truy cập con trỏ tới cấu trúc:

Ptr->membername;

Ví dụ: s->sno, s->sname, s->marks;

Ví dụ 1

Chương trình C sau giải thích cấp phát bộ nhớ động cho cấu trúc:

#include <stdio.h> 
#include <stdlib.h> 
struct person { 
    int age; 
    float weight; 
    char name[30]; 
}; 
int main() { 
    struct person *ptr; 
    int i, n; 
    printf("Nhập số người: "); 
    scanf("%d", &n); 
    // cấp phát bộ nhớ cho n struct person 
    ptr = (struct person*) malloc(n * sizeof(struct person)); 
    for (i = 0; i < n; ++i) { 
        printf("Nhập tên và tuổi: "); 
        // Truy cập thành viên struct person thứ 1: ptr->name, ptr->age 
        // Truy cập thành viên struct person thứ 2: (ptr+1)->name, (ptr+1)->age 
        scanf("%s %d", (ptr+i)->name, &(ptr+i)->age); 
    } 
    printf("Hiển thị thông tin:\n"); 
    for (i = 0; i < n; ++i) 
        printf("Tên: %s\tTuổi: %d\n", (ptr+i)->name, (ptr+i)->age); 
    return 0; 
}

Kết quả

Nhập số người: 1 
Nhập tên và tuổi: bhanu 24 
Hiển thị thông tin: 
Tên: bhanu Tuổi: 24

Ví dụ 2

Ví dụ khác về con trỏ và cấu trúc:

#include <stdio.h> 
// Khai báo cấu trúc bên ngoài và bên trong 
struct Manager { 
    char Name[15]; 
    int Age; 
    char Gender; 
    float Level; 
    char Role[50]; 
    char temp; 
} m[20]; 

void main() { 
    int i; 
    struct Manager *p; 
    p = &m; 
    for (i = 1; i < 3; i++) { 
        printf("Nhập tên manager %d: ", i); 
        gets(p->Name); 
        printf("Nhập tuổi manager %d: ", i); 
        scanf("%d", &p->Age); 
        scanf("%c", &p->temp); // Xóa bộ đệm 
        printf("Nhập giới tính manager %d: ", i); 
        scanf("%c", &p->Gender); 
        printf("Nhập cấp độ manager %d: ", i); 
        scanf("%f", &p->Level); 
        scanf("%c", &p->temp); // Xóa bộ đệm 
        printf("Nhập vai trò manager %d: ", i); 
        gets(p->Role); 
        p++; 
    } 
    p = &m; 
    for (i = 1; i < 3; i++) { 
        printf("Tên Manager %d là: %s\n", i, p->Name); 
        printf("Tuổi Manager %d là: %d\n", i, p->Age); 
        printf("Giới tính Manager %d là: %c\n", i, p->Gender); 
        printf("Cấp độ Manager %d là: %f\n", i, p->Level); 
        printf("Vai trò Manager %d là: %s\n", i, p->Role); 
        p++; 
    } 
}

Kết quả

Nhập tên manager 1: Hari 
Nhập tuổi manager 1: 55 
Nhập giới tính manager 1: M 
Nhập cấp độ manager 1: 2 
Nhập vai trò manager 1: Senior 
Nhập tên manager 2: Bob 
Nhập tuổi manager 2: 60 
Nhập giới tính manager 2: M 
Nhập cấp độ manager 2: 1 
Nhập vai trò manager 2: CEO 
Tên Manager 1 là: Hari 
Tuổi Manager 1 là: 55 
Giới tính Manager 1 là: M 
Cấp độ Manager 1 là: 2.000000 
Vai trò Manager 1 là: Senior 
Tên Manager 2 là: Bob 
Tuổi Manager 2 là: 60 
Giới tính Manager 2 là: M 
Cấp độ Manager 2 là: 1.000000 
Vai trò Manager 2 là: CEO