2019-11-3 c语言培训(结构体,链表)

数组

  • 数值的默认赋值

#include"stdio.h"
//1,把数组和变量放在全局变量默认赋值为0
int a;
int num[100];
int main()
{
    //2,对部分赋值,其余默认赋值为0
    int num_1[10]={0};
    int num_2[10][10]={0};

    //输出
    printf("%d\n",a);
    printf("%d\n",num[66]);
    printf("%d\n",num_1[4]);
    printf("%d\n",num_2[4][4]);
    return 0;
}

输出结果:


图片.png
  • 字符串数组

    - gets(字符串名) 获得字符串
    - puts(字符串名) 输出字符串且换行
    

注:使用gets 和 scanf 时会产生异常
当在scanf()后面使用gets()时,程序直接逃过gets()函数。直接跳过的原因是,在结束前一个scanf输入时输入的回车被后一个gets输入时接受,也就是说前一个地方输入的“数据+回车”分别被两个地方接受。gets()遇到前面scanf()输入的回车时停止接收,gets()中的输入缓冲区没有数据。sanf()和gets()先后一起使用时会给造成一种似乎gets()没有被执行的假象。

其他需要记住的函数:

strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。
strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回
大于 0。

指针

每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。

  • 定义:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:

    type *var-name;
    

eg,

int *p=NULL;

也就是说,指针储存的数据是数据的地址,而不是数据的值

  • & 与 *
    & 取地址符,用于获取变量的地址
    *  解引用运算符,它的操作数必须是指针类型,用来获取指针指向变量的内容
    int value=3;
    //得到value的地址
    int *arrow=&value;
    printf("%d\n",arrow);
    printf("%d\n",*(arrow));
图片.png
  • 地址的运算
    请看下面的代码,如果a的值等于10,以下的输出会是多少?
int a[9] = { 0 };
printf("%d\n", a);
printf("%d\n", (a + 1));
printf("%d\n", (a + 2) - a);

·
·
·
·
·
·
·
·
·
·
·
·
·

c语言标准中有如下规定:
当一个加法运算,加号左边的操作数是一个指针,而右边的操作数是一个整数时,这个整数值先乘以指针类型的大小(sizeof(int)),然后再加到左边的数上。

当同一个数组的两个成员的指针相减时,其差值为:地址值的差,再除以一个数组成员的size。这个结果代表了两个指针对应元素的下标之差。

函数

  • 函数的组成
    1,返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
    2,函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
    3,参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
    4,函数主体:函数主体包含一组定义函数执行任务的语句。

  • 形参与实参
    形参(形式参数):在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。
    实参(实际参数):数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。

int maxs(int a, int b)//括号里面就是形参。调用时获得内存,函数结束时释放内存
{
    if (a > b)
        return a;
    else
        return b;
}
printf("maxs函数的值为:%d\n", maxs(10, 111));//10和111就是实参
  • 函数书写顺序
  • 值传递和地址传递(重点掌握)

结构体

  • 定义:C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。

结构体类型的名字是由一个关键字 struct结构体名 组合而成的。结构体名由用户指定,又称“结构体标记”(structure tag) 。
花括号内是该结构体所包括的子项,称为结构体的成员(member)。对各成员都应进行类型声明,即
“成员表列”(member list)也称为“域表”(field list),每一个成员是结构体中的一个域。成员名命名规则与变量名相同。

  • 使用typedef来声明新的变量
typedef struct studentlist {
    int id;
    char name[10];
    int num[20];
    struct studentlist *next;
}student;

声明之后就可以使用变量名来进行定义

student *p, *q,*head;
  • 结构体数组
  • . 和 ->的区别

链表

链表是物理存储单元上非连续的、非顺序的存储结构,由一系列结点组成。

图片.png
  • 创建顺序:
    1.使用malloc()函数来为结点开辟空间,并把当前开辟结点的next指针指向为空
p = (student *)malloc(sizeof(student));
p->next = NULL;

    2.用一个新的该类型指针指向创建好的结点,接着创建新的结点

注:学会链表关键在于了解链表创建时的步骤,知道如何确定结点之间关系

作业

  1. 以当前结构体为例,实现链表的创建,增加,删除功能,每使用一种功能之后,遍历输出结点的id,名字。
       增加:可以指定在第几个结点之后插入新的结点
       删除:用户输入学生名字,删除对应学生名字的结点
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,387评论 3 44
  • 版权声明:本文为 gfson 原创文章,转载请注明出处。注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢...
    gfson阅读 2,677评论 0 6
  • 第十章 指针 1. 地址指针的基本概念: 在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为...
    坚持到底v2阅读 1,026评论 2 3
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,076评论 0 2
  • C语言是面向过程的,而C++是面向对象的 第一章概述 1. C语言的特点 语言简洁、紧凑,使用方便、灵活。共有32...
    小辰带你看世界阅读 1,156评论 0 1