该系列文章源于《深入理解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语言内存模型:操作系统(类型和架构)和编译器(厂商和版本)  

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

  请看代码例子:  

  #include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc, char **argv)
{
typedef struct student{
char name[];
char class[];
char sex[];
int age;
//char zhu
} Student; Student stu;
strcpy(stu.name, "zhangsan");
strcpy(stu.class, "A1411");
strcpy(stu.sex, "na");
//stu.zhu = 'n';
stu.age = ; printf("The stu information: \n");
printf("Name:\t%s;\n", stu.name);
printf("Class:\t%s;\n", stu.class);
printf("Sex:\t%s;\n", stu.sex);
printf("Age:\t%d;\n", stu.age);
//printf("Zhu:\t%c;\n", stu.zhu); printf("The struct stu'size is %d\n", sizeof(Student)); return ;
}

  保留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语言总是一知半解的。

00深入理解C指针之--- 指针之外的更多相关文章

  1. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  2. 02深入理解C指针之---指针类型和值

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 1.指针的类型: 可以在声明指针时,指定指针的类型,例如: (1)void *x  声 ...

  3. 06深入理解C指针之---指针操作和比较

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则.本节内容中指针的操 ...

  4. 10深入理解C指针之---指针运算和比较

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针运算有很多种,主要有指针的声明*.指针的解引*.指针指向(*).或->.指针 ...

  5. 这样子来理解C语言中指针的指针

    友情提示:阅读本文前,请先参考我的之前的文章<从四个属性的角度来理解C语言的指针也许会更好理解>,若已阅读,请继续往下看. 我从4个属性的角度来总结了C语言中的指针概念.对于C语言的一个指 ...

  6. 从四个属性的角度来理解C语言的指针也许会更好理解

    文章会在文末更新! 关于指针是什么,很多教材已经作出了定义,大多数都会定义为"存放变量内存地址的变量".从这句话中我觉得除了让我知道这个定义有11个字以外,其他就没什么用了.我个人 ...

  7. 理解git 中的HEAD指针&branch指针

    理解git 中的HEAD指针&branch指针 Yooye关注 2019.02.28 10:44:32字数 492阅读 668 HEAD指针 使用git checkout 来移动HEAD指针, ...

  8. 深入理解C语言-函数指针

    函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作. 函数类型基础 函数三要素: 名称.参数.返回值 C语言中的函数有 ...

  9. 深入理解C语言-二级指针三种内存模型

    二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...

随机推荐

  1. Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化

    重大新特性 支持 Redis/PDO/MySQLi 从4.1.0版本开始支持了对PHP原生Redis.PDO.MySQLi协程化的支持. 可使用Swoole\Runtime::enableCorotu ...

  2. ZendFramework-2.4 源代码 - ViewManager类图

  3. hihocoder 1097 最小生成树一·Prim算法

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

  4. TCP/IP网络编程之多线程服务端的实现(一)

    为什么引入线程 为了实现服务端并发处理客户端请求,我们介绍了多进程模型.select和epoll,这三种办法各有优缺点.创建(复制)进程的工作本身会给操作系统带来相当沉重的负担.而且,每个进程有独立的 ...

  5. 实验6 流类库与I/O

    Part2 基础练习 使用文件I/O流,以文本方式打开Part1中合并后的文件,在文件最后一行添加字符"merge successfully. " // 合并两个文件内容到一个新文 ...

  6. 排查和处理一台被攻击的linux系统及其事后分析

    11:40 2018/3/16 发现最近几天服务器流量异常的大,检查了系统命令发现命令最近的修改时间很近,检查dns配置也发现了异常的dns服务器地址. 考虑到事态的严重性,铲掉这个系统重新搭建. 事 ...

  7. MongoDB快速入门学习笔记3 MongoDB的文档插入操作

    1.文档的数据存储格式为BSON,类似于JSON.MongoDB插入数据时会检验数据中是否有“_id”,如果没有会自动生成.shell操作有insert和save两种方法.当插入一条数据有“_id”值 ...

  8. sqlserver2008透明书库加密

    /*Title:TDE加密Author:浪客Environment:Windows Server 2008 Enterprise + SQL Server 2008 EnterpriseDescrip ...

  9. [oldboy-django][5python基础][高级特性]generator生成器

    # 生成器基础 - 定义 在循环的时候不断推算下一个元素的值,而不是一下子创建空间存储所有元素,这样节省空间. 并且在适当的条件结束循环,这种一边循环一边计算的机制,称为generator生成器 - ...

  10. [转]Docker容器内不能联网的6种解决方案

    注: 下面的方法是在容器内能ping通公网IP的解决方案,如果连公网IP都ping不通,那主机可能也上不了网(尝试ping 8.8.8.8) 1.使用--net:host选项 sudo docker ...