2019-08-03 Day6 指針的使用和結構體

目的

学习指针与结构体,理解其作用和使用方法以加深对C语言的理解和领悟;要明白指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址;要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区;而也要弄明白结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据,就跟int、float等一样

指针

指针是C语言显著的优点之一,指针使用起来十分灵活,而且能提高某些程序的编写效率,但是指针如果使用不当,很容易造成系统错误,许多程序的“挂死”的大部分原因都是由于错误地使用指针所造成的

使用指针的原因

指针可以解决跨区域(不同作用域 不同代码块)之间的数据交互,同时使用指针能够创建动态数据结构;这样就能使内存使用大大减少以减少浪费,从而使程序运行更流畅

指针的使用

如果有一个变量专门用来存放另一个变量的地址,则它被称为“指针变量”;而指针变量的定义方法与一般变量的定义方法相似,如下:

datatype *name;

其中,“*”表示这是一个指针变量,name即为定义的指针变量名,datatype表示本指针变量所指向的变量的数据类型
注意:定义指针变量的时候一定要给初值,不确定就给NULL
而给一个指针变量赋值可以有以下两种方法:
1.定义指针变量的同时就进行赋值

int a;
int *p = &a;

2.先定义指针变量,之后再赋值

int a;
int *p;
p = &a;

示例

#include <stdio.h>
int main()
{
   int a, b;
   int *p1, *p2;
   printf("请输入苹果和香蕉的价格:\n");
   scanf("%d,%d",&a,&b);
   p1 = &a;
   p2 = &b;
   printf("苹果的价格为:%d/一斤\n",*p1);
   printf("香蕉的价格为:%d/一斤\n",*p2);
   return 0;
}

指针与数组的关系

定义一个数组 系统会给其分配内存空间,可以存值;而同时数组名并不是一个变量,系统不会给它分配内存空间
定义一个指针变量 系统只会为变量本身分配8个字节的内存空间,是无法存值的,因为没有为他分配可以存值的内存空间
如果想要给指针指向的区域赋值,有三种办法:
1.指针变量已经指向某块区域

int a3 = 10;
 int *pa = &a3;
 *pa = 30;

2.指针指向一个数组

 int num2[10]= {};
 int *pNum = num2;

3.动态分配内存 malloc realloc free
上面两种指向的内存都是别人的,而现在希望分配一个属于自己的内存空间;自己分配的内存空间必须自己释放,但普通变量的内存是系统自己分配,所以系统自己负责释放

char *pName = malloc(10 * sizeof(char));
  //判斷分配是否成功
  if(pName == NULL){
      //分配失敗
      exit(EXIT_FAILURE);
  }

  //當之前分配的內存空間不夠了 就需要在之前的基礎上重新分配
  //realloc 必須是之前使用malloc分配過得
  //如果是系統分配的內存 是不能使用realloc的
  //用完了就要自己釋放內存
  pName = realloc(pName, 4*sizeof(char));

  free(pName);

结构体

普通数组是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。于是我们便想到了结构体

结构体的使用

声明一个结构体的用法一般是:

struct 结构体名{
结构体所包含的变量或数组
};

结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};

声明一种类型,struct 结构体名 ==int

struct stu{
    char *name;  
    int num;  
    int age;  
    char group;  
    float score;  
};
struct stu xw;

实际例子

#include <stdio.h>
int main(){
    struct{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组
        float score;  //成绩
    } stu1;
    //给结构体成员赋值
    stu1.name = "Tom";
    stu1.num = 12;
    stu1.age = 18;
    stu1.group = 'A';
    stu1.score = 136.5;
    //读取结构体成员的值
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
    return 0;
}

心得体会

今天学习的知识十分地难懂,特别是后面的链表,听得确实是模模糊糊的,所以说还需要下来多回顾,不要只依赖于上课的时候,继续努力,刚好用明天休息的时间来解决自己不同的地方。

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

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,419评论 3 44
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,076评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,718评论 2 9
  • 趁现在没事儿,咱们聊个人儿,老钱。 老钱,大学四年,整整玩了四年游戏,还是深度沉迷的那种。要说起来,人脑子是真聪明...
    放肆的肉肉阅读 398评论 2 2
  • 今天是打假日,但是又能怎样呢。读今天的文章,我知道了我们最昂贵的礼物就是注意力。注意力是我们最重要的东西
    帅气的三侄子阅读 333评论 0 1