第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;
}
这两章中以上的内容较薄弱需要多加复习。