《C语言程序设计》——苏小红

本文介绍了C++中的指针数组、动态内存分配函数malloc和calloc,以及结构体和单向链表的基础概念。通过实例演示了如何使用这些工具存储和管理数据,强调了链表结构的特点和操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 第11章指针和数组

1.指针数组:

char *ptr[N];

常用于对字符串数组中的字符串整体交换,使用前必须对其进行初始化。

2.动态数组:

①函数malloc()——核心函数

函数原型:void *malloc(unsigned int size);

函数malloc用于分配若干字节的内存空间,返回一个指向该地址内存首地址的指针,“size”表示向系统申请空间的大小,通常使用sizeof()函数来表示此大小。

②函数calloc()——核心函数

函数原型:void *calloc(unsigned int num,unsigned int size);

函数calloc相当于声明了一个一维数组。其中第一个参数num表示向内存空间申请的数量,第二个参数size表示申请的每个空间的字节数,确定了数组元素的类型(通常使用sizeof函数)。

//例1:输入你大一学年的课程数,并输入每门课程的分数。
#include<stdio.h>
#include<stdlib.h>//使用malloc和calloc函数需要带上 stdlib.h 头文件
int main(void)
{
    int n, * p, i;

    printf("How many courses:");
    scanf_s("%d", &n);
    p = (int*)malloc(n * sizeof(int));
    printf("Input score:");
    for (i = 0; i < n; i++)
    {
        scanf_s("%d", &p[i]);
    }
    printf("The score is:");
    for (i = 0; i < n; i++)
    {
        printf("%d ", p[i]);
    }
    free(p);//释放内存

    return 0;
}

第12章结构体和数据结构基础

1.单项链表:

①结构体

结构体是一种由用户自定义的抽象数据类型,是将不同类型的数据成员组织到统一的名字之下,当需要处理关系紧密、逻辑相关、具有相同或者不同类型的数据时就要用到结构体。

//结构体的定义
struct example
{
    int i;
    double j;
    char c;
    char str[10];
};

//结构体的嵌套
struct date
{
    int year;
    int month;
    int day;
};
struct student
{
    char name[10];
    long id;
    struct date ddd;
};

//结构体指针
struct student
{
    char name[10];
    long id;
    struct date ddd;
};
struct student stu;
struct student *stu1;

②单向链表

链表的每个元素称为一个节点,每个节点都可存储在内存中的不同位置。为了表示每个元素与后继元素的逻辑关系,以便构成“一个结点连接着另一个结点”的链式结构,因此链表中的每个元素节点都包含两部分:第1部分称为链表的数据域,用于存储元素本身的数据信息;第2部分是一个结构体指针,称为链表的指针域,用于存储其后继节点的位置信息。

//最简单的节点
typedef struct node
{
    int n;
    NODE *next;
}NODE;

创建一个链表犹如搭建一座高楼,地基即链表的首位置很重要,有了它才能找到链表的位置进行访问。

//例2:用户输入大一的课程数,并用链表的方式存储分数和其对应课程。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
	char name[50];
	int n;
	struct node* next;
}NODE;
int main(void)
{
	NODE* head, * p, * q;
	int i, n, a;

	printf("Please input coures number:");
	scanf_s("%d", &n);
	head = p = q = NULL;
	
	for (i = 1; i <= n; i++)
	{
		p = (NODE*)malloc(sizeof(NODE));
		printf("Please input course name:");
		scanf_s("%s", p->name, 50);
		printf("Please input course score:");
		scanf_s("%d", &p->n);
		if (head == NULL)
		{
			head = p;
			p->next = NULL;
		}
		else
		{
			p->next = q->next;
			q->next = p;
		}
		q = p;
	}
	while (head != NULL)
	{
		printf("%s %d\n", head->name, head->n);
		head = head->next;
	}
	free(head);

	return 0;
}

这两章中以上的内容较薄弱需要多加复习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值