• 00深入理解C指针之--- 指针之外


      该系列文章源于《深入理解C指针》的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教。  

      C语言从诞生之初就非常善于和硬件打交道,经过这么多年的发展之后,其灵活性和超强的特征是受到几乎所有程序员的肯定。C语言的这种灵活性很大一部分程度来源与C指针,指针为C语言动态操控内存提供了支持,同时也便于访问硬件。由于编程的本质就是操控数据,而数据大多都在内存中,理解C管理内存的工作原理,就显得尤为重要了。知道malloc()函数能够从堆上申请内存,理解内存分配的本质则是另外的事。

      C语言中掌握指针的意义:

        1、撰写快速高效的代码

        2、方便解决问题的途径

        3、支持内存灵活的分配

        4、使得表达异常的简洁

        5、减少传递数据的开销

        6、保护函数传递的数据

        7、实现函数强大的回调

        8、拥有数据万能的结合

      C语言中指针的用途:

        1、动态操控内存:2章、 3.1章

        2、灵活数据传输:3.2章、

        3、方便数据转型:类型定义、指针转换

        4、统一数据存储:系统层面、内存组织

        5、实现硬件访问:8.1章、 8.2章

        6、强化数据结构:3.3章、 4章、 5章、 6章、 8.3章、 8.4章

       编程的本质是操控数据,包括数组的组织和数据的操作,除了特殊的算法外,算法也是操作数据的范畴。数据操作需要计算机中CPU和内存的介入,CPU主要完成数据的计算:算术运算、逻辑运算、浮点运算,包括数据的传递方向和传递时机等。

      指针:存放有内存地址的变量;

      理解C指针:理解C语言组织内存方式(静);理解C程序管理内存方式(动);必须理解C语言的内存模型

      C语言内存模型:操作系统(类型和架构)和编译器(厂商和版本)  

      变量和内存:变量做为计算中内存地址的别称,主要是给人看的;变量的三要素:类型和值  

      请看代码例子:  

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4
     5 int main(int argc, char **argv)
     6 {
     7     typedef struct student{
     8         char name[10];
     9         char class[6];
    10         char sex[2];
    11         int age;
    12         //char zhu
    13     } Student;
    14
    15     Student stu;
    16     strcpy(stu.name, "zhangsan");
    17     strcpy(stu.class, "A1411");
    18     strcpy(stu.sex, "na");
    19     //stu.zhu = 'n';
    20     stu.age = 19;
    21
    22     printf("The stu information: 
    ");
    23     printf("Name:	%s;
    ", stu.name);
    24     printf("Class:	%s;
    ", stu.class);
    25     printf("Sex:	%s;
    ", stu.sex);
    26     printf("Age:	%d;
    ", stu.age);
    27     //printf("Zhu:	%c;
    ", stu.zhu);
    28
    29     printf("The struct stu'size is %d
    ", sizeof(Student));
    30
    31     return 0;
    32 }

      保留12、19、27行的代码的执行结果:

      The stu information:
      Name:   zhangsan;
      Class:  A1411;
      Sex:    na;
      Age:    19;
      Zhu:    n;
      The struct stu'size is 28
      其中12行代码和11行代码交换后执行结果:

      The stu information:
      Name:   zhangsan;
      Class:  A1411;
      Sex:    na;
      Age:    19;
      Zhu:    n;
      The struct stu'size is 24


      注释12、19、27行的代码的执行结果
      The stu information:
      Name:   zhangsan;
      Class:  A1411;
      Sex:    na;
      Age:    19;
      The struct stu'size is 24

      唯一的区别就是在结构体中增加了一个char型字符,但是结构体的大小增加了四个。

      这个例子充分说明想学好C语言,必须搞定C语言中计算机的内存分配的原理和机制,否则C语言总是一知半解的。

  • 相关阅读:
    程序员用实力把公司干倒闭了
    可能是把 Java 接口讲得最通俗的一篇文章
    我去,你竟然还不会用 synchronized
    优秀的程序员真的不写注释吗?
    小白,你要的Java抽象类,操碎了心!
    如何将arcgis的mxd文档存储为相对路径
    解决EditorLineEnds.ttr被锁定导致Delphi2006-2010无法启动的问题
    用EXcel制作不同背景的图
    [转载]: delphi中XLSReadWrite控件的使用(1)---简介
    [转载]: delphi中XLSReadWrite控件的使用(2)---delphi XE下安装
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6893294.html
Copyright © 2020-2023  润新知