ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

高级C指针编程第7章:指针和结构。

前开发者教程 2020年8月3日

在C语言中,数组之后,结构是程序员可用的最重要的数据结构。

我们将了解不同的方法来初始化结构内存并访问结构中的元素。

创建简单的结构并访问其中的元素

在这个例子中,我们将在main内部创建一个结构变量,并在堆栈中分配内存。

下面是一个“student”具有2个元素的结构。一个用于保存名称的char数组,一个用于保存卷号的int变量。

然后我们在main内部创建一个结构变量,这样它将在堆栈内部创建内存。

然后,由于我们已静态分配了内存,因此可以按点访问元素“.” operators.

 

例:

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

struct 学生_database
{
    char name[30];
    int roll_no;
};

int main() 
{ 
    struct 学生_database stud = {"jane", 2};

    printf("Student name = %s \n", stud.name);
    printf("Student roll no = %d \n", stud.roll_no);

    return 0;
}

 

输出:

Student name = jane
Student roll no = 2

 

为结构动态分配内存并访问其中的元素

要动态分配内存,您需要使用malloc。

这将在堆段中分配内存。

要访问元素,您需要使用箭头运算符“->”.

例:

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

struct 学生_database
{
    char name[30];
    int roll_no;
};

int main() 
{ 
    struct 学生_database *stud = NULL;
    stud = (struct 学生_database*) malloc(sizeof(struct 学生_database));

    stud->roll_no = 30;
    strcpy(stud->name, "Jane Doe");

    printf("Student name = %s \n", stud->name);
    printf("Student roll no = %d \n", stud->roll_no);

    return 0;
}

输出:

Student name = Jane Doe
Student roll no = 30

 

使用char指针创建简单的结构并访问其中的元素

在这个例子中,我们将在main内部创建一个结构变量,并在堆栈内部分配内存。

下面是一个“student”具有2个元素的结构。一个char指针,用于保存名称,int变量,用于保存卷号。

然后我们在main内部创建一个结构变量,这样它将在堆栈内部创建内存。

一旦为结构变量,char指针创建了静态内存,就只会分配该指针的内存。

因此,您需要为要保留的字符串显式分配内存。这是在动态内存管理的帮助下完成的。

然后,由于我们已静态分配了内存,因此可以按点访问元素“.” operators.

例:

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

struct 学生_database
{
    char *name;
    int roll_no;
};

int main() 
{ 
    struct 学生_database stud;

    stud.name = (char*) malloc(sizeof("www.ProdeveloperTutorial.com")+1);
    strcpy(stud.name, "www.ProdeveloperTutorial.com");

    stud.roll_no = 20;

    printf("Student name = %s \n", stud.name);
    printf("Student roll no = %d \n", stud.roll_no);

    return 0;
}

输出:

Student name = www.ProdeveloperTutorial.com
Student roll no = 20

 

使用char指针创建简单的结构并访问其中的元素。动态分配内存。

同样在这里,当我们为结构动态分配内存时,空间仅分配给char指针。

因此,您需要分配内存以动态容纳字符串。

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

struct 学生_database
{
    char *name;
    int roll_no;
};


int main() 
{ 
    struct 学生_database *stud = NULL;
    stud = (struct 学生_database*) malloc(sizeof(struct 学生_database));

    stud->roll_no = 30;
    stud->name= (char *) malloc( sizeof("Jane Doe")+1);
    strcpy(stud->name, "Jane Doe");

    printf("Student name = %s \n", stud->name);
    printf("Student roll no = %d \n", stud->roll_no);

    return 0;
}

输出:

Student name = Jane Doe
Student roll no = 30

 

如何访问结构内部的结构元素:

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

struct 学生_detail
{
    char name[40];
    int roll_no;
};

struct 学生_database
{
    struct 学生_detail detail;
    int percentage;
};



int main() 
{ 
    // statically allocated memory
    struct 学生_database 学生_database_1;

    学生_database_1.percentage = 80;
    学生_database_1.detail.roll_no = 30;
    strcpy(student_database_1.detail.name, "Jane Doe");

    printf("Student 1 percentage = %d\n", 学生_database_1.percentage);
    printf("Student 1 roll_no = %d\n", 学生_database_1.detail.roll_no);
    printf("Student 1 name = %s\n", 学生_database_1.detail.name);

    struct 学生_database *student_database_2;
    学生_database_2 = (struct 学生_database*) malloc(sizeof(struct 学生_database));

    学生_database_2->percentage = 70;
    学生_database_2->detail.roll_no = 10;
    strcpy(student_database_2->detail.name , "New John"); 

    printf("Student 2 percentage = %d\n", 学生_database_2->percentage);
    printf("Student 2 roll_no = %d\n", 学生_database_2->detail.roll_no);
    printf("Student 2 name = %s\n", 学生_database_2->detail.name);

    return 0;
} 


 

输出:

Student 1 percentage = 80
Student 1 roll_no = 30
Student 1 name = Jane Doe
Student 2 percentage = 70
Student 2 roll_no = 10
Student 2 name = New John

按值将结构传递给函数

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

struct 学生_database
{
    char name[30];
    int roll_no;
};

void display_data(struct 学生_database stud)
{
    printf("Student name = %s \n", stud.name);
    printf("Student roll no = %d \n", stud.roll_no);
}

int main() 
{ 
    struct 学生_database stud = {"jane", 2};

    display_data(stud);


    return 0;
} 

 

输出:

Student name = jane
Student roll no = 2

通过引用将结构传递给函数

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

struct 学生_database
{
    char name[30];
    int roll_no;
};

void display_data(struct 学生_database *stud)
{
    printf("Student name = %s \n", stud->name);
    printf("Student roll no = %d \n", stud->roll_no);
}

int main() 
{ 
    struct 学生_database stud = {"jane", 2};

    display_data(&stud);


    return 0;
} 


输出:

Student name = jane
Student roll no = 2

 

将结构返回给函数

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

struct 学生_database
{
    char name[30];
    int roll_no;
};

struct 学生_database* get_data()
{
    struct 学生_database *stud = NULL;
    stud = (struct 学生_database*) malloc(sizeof(struct 学生_database));    stud->roll_no = 30;
    strcpy(stud->name, "Jane Doe");

    return stud;
}

int main() 
{ 
    struct 学生_database *stud = NULL;
    stud = get_data();

    printf("Student name = %s \n", stud->name);
    printf("Student roll no = %d \n", stud->roll_no);

    return 0;
} 

输出:

Student name = Jane Doe
Student roll no = 30

 

 

 

分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的

    <a id="rzzw5we"><basefont class="Es1CY9f"><samp class="XuE2zIR"></samp></basefont></a>