导航:

  1.指针

    2. 数组
    3. 结构体,共用体
    4. 内存分布图
    5. 段错误分析
----->x<------------->x<--------------->x<--------------->x<------------->x<-----  
                                一切皆内存 .
    1. 指针
        
        1.1 认识指针和指针变量
 
            假设,有一个大柜子,这个大的柜子,有很多很多的小格子,每一个格子,都有一个唯一的编码,从0开始,一直往下数.
        指针: 就是,就是这个唯一编码,我们能通过这个唯一编码,找到指定的这个小格子.你就能存放或者取出东西.
        
        指针变量: 变量实际上是在内存中圈一个空间, 指针变量就是定义一个盒子, 这个盒子是int大小, 里面存放的数据, 是一个地址. 这就是指针变量.
        类比一下: int a; 这是在内存中声明一个小盒子,这个小盒子是int大小,可以用来存放数据.
 
                 char *p; 这也是在内存中声明一个小盒子,这个 小盒子1 呢,还是 int 大小,因为 指针变量 是int型的,
                    然后这个 小盒子1 里面存放的数据 不是普通的数据, 是一串地址, 通过这个地址, 我就能找到写着这个地址的另一个小盒子2,
                     这个 小盒子2 呢,是 char 大小的小盒子,里面可以放你想放的数据.
                     所以这个 p 就是指针变量, 他是int大小,指向另一个地址的变量 .
 
        问? 为什么指针是int类型的??
            假设 描述指针大小的盒子是char大小的,那就是 8位,256种状态.256种状态只能描述256个小格子.
            假设我们现在就内存条就1G了,那我要用一个数,来描述1G里面所有的小格子,这个数要多大呢?
            2^10 =1k, 2^20 =1M, 2^30 =1G, 所以,要描述1G种状态位,我至少要有30位的大小来描述一个数据.
 
            在32位的操作系统中,cpu的一次访问,就能表达4G种状态内的任意一种.也就是说,在32位的操作系统中,我能识别出4G上限的编码,4G+1我就识别不出来了,因为已经超出了我的int类型的大小.
            所以,一般 用 int 来描述 一个指针的大小 .
            你想啊,我有300个小格子,但是你的char 只能数到 256 ,剩下的小格子不是浪费了吗 .
 

        char *p 说明了2个信息
        (1) 指针p 这个  小盒子1    的大小是 int
        (2) 指针P 所指向 小盒子2    的大小是 char,
        int main()
{
int *p1;
char *p2;
printf("p1 is %u,p2 is %u\n",sizeof(p1),sizeof(p2)); //结果都是 4,因为指针变量的大小是int型的 .
return ;
}
        int main()
{
int a = 0x12345678;
int *p1; //指针声明
p1 = &a; //指针赋值
printf("the p1 is %x\n",*p1);
return ;
}
        1.2 指针变量的声明和使用 .
            声明: int *p;
            使用:
                存和取:    *p
                赋值: p = &a;
            int main(){
int a = ; //定义一个变量a,是100;
int *p; //定义一个指针p
p = &a; //将p指向a的地址
*p++; //通过打开通道的方式,对p指向内存空间里面的内容 进行+1;
printf("a is %d\n",a); //
return ;
}
        1.3 指针和修饰符
            跟变量一样,除了空间大小的描述,还有空口位置的描述.指针同样有这种描述.
            
            -- const
                const 认为是只读性质的变量,给人一种, 不能变的感觉 .
                
                (1) const char *p; // p是可变的,随便可以指向哪里,但是p指向的内容是固定不变的.
                (2) char* const p; // p是固定不变的,但是p指向的内容是可以随意改变的.
                (3) const char* const p; //p是固定不变得,而且它指向的内容也是不变的.
                (1)--> 字符串. "xxxxx" 双引号里面的内容是无法修改的 .
                (2)--> 硬件资源 ,地址不能变,但是里面的内容是不断刷新的.
                (3)--> ROM       
            int main(){
const char *p = "helloworld\n"; //这句话的意思是,指针p指向了一个字符串的地址,
printf("the fiest is %c",*p); //结果是 'h',因为是char类型的.
*p = 'k'; //段错误,因为const空间是不能做修改的 .
return ;
}
            -- volatile
                防优化 .
                volatile char *p;
                    while(*p ==100);
            
            -- typedef
                typedef char *name_t; name_t 是一种指针类型的名称,指向char内存...
                name_t abc;
    2. 数组
    -- 一维数组 和 二维数组 和多维数组
    3. 结构体,共用体
    4. 内存分布图
    5. 段错误分析

C语言基础篇(三) 指针的更多相关文章

  1. C语言基础知识(三)——指针

    指针定义 1.指针的值表示的是它所指向对象的地址,指针+1表示的是下一元素的地址,按**字节**编址,而不是下一字节的地址. 2.依照数据类型而定,short占用两字节.int占用4字节.double ...

  2. Java语言基础(三)

    Java语言基础(三) 一.    补码 (1).之所以有补码是因为要考虑成本 就是造计算机的成本 (2).下面让我们分析一下补码 以四位补码为例 <1> 高位是符号位,它决定其是正数还是 ...

  3. NIO相关基础篇三

    转载请注明原创出处,谢谢! 说在前面 上篇NIO相关基础篇二,主要介绍了文件锁.以及比较关键的Selector,本篇继续NIO相关话题内容,主要谈谈一些Linux 网络 I/O模型.零拷贝等一些内容, ...

  4. docker+k8s基础篇三

    Docker+K8s基础篇(三) kubernetes上的资源 A:k8s上的常用资源 Pod的配置清单 A:Pod上的清单定义 B:Pod创建资源的方法 C:spec下其它字段的介绍 Pod的生命周 ...

  5. Hybrid APP基础篇(三)->Hybrid APP之Native和H5页面交互原理

    本文已经不维护,新地址: http://www.cnblogs.com/dailc/p/8097598.html 说明 Hybrid模式原生和H5交互原理 目录 前言 参考来源 前置技术要求 楔子 A ...

  6. Python基础篇(三)_函数及代码复用

    Python基础篇_函数及代码复用 函数的定义.使用: 函数的定义:通过保留字def实现. 定义形式:def <函数名>(<参数列表>): <函数体> return ...

  7. C语言----选择结构(基础篇三)

    大家好,忙里抽空更新一下自己的博客,算是自己的一个进步,C语言视频启蒙我早就看完啦,只是觉得这个视频真不错,所以给大家分享一下,同时自己还有很多没有理解透彻,写写博客算是一个笔记更是对自己所学的知识的 ...

  8. 算法笔记——C/C++语言基础篇(已完结)

    开始系统学习算法,希望自己能够坚持下去,期间会把常用到的算法写进此博客,便于以后复习,同时希望能够给初学者提供一定的帮助,手敲难免存在错误,欢迎评论指正,共同学习.博客也可能会引用别人写的代码,如有引 ...

  9. 前端开发之JavaScript基础篇三

    主要内容: 1.创建对象的几种方式 2.JavaScript内置对象 3.JavaScript错误--Throw.Try 和 Catch 4.JavaScript 表单验证 一.创建对象的几种方式 1 ...

随机推荐

  1. 微信小程序电商实战-商品列表流式布局

    今天给大家分享一下微信小程序中商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~ 流式布局概念 流式布局也叫百分比布局 把元素的宽,高,margin,padding不再用固定数值,改用百分 ...

  2. SpringBoot的运行原理

    SpringBoot关于自动配置的源码在spring-boot-autoconfigure-xxxxx.jar中 <源码解析> 查看当前项目中已启用的和未启用的自动配置的报告的三种方法: ...

  3. rollback

    savepoint test; rollback to savepoint test;

  4. Java—多态

    多态——对象的多种形态(继承是多态实现的基础) 引用多态:父类的引用可以指向本类的对象:父类的引用可以指向子类的对象 方法多态:创建本类对象时,调用的方法为本类方法:创建子类对象时,调用的方法为子类重 ...

  5. SQLServer:执行计划

    http://www.cnblogs.com/kissdodog/category/532309.html

  6. C#中WinForm程序退出方法技巧总结[转]

      这篇文章主要介绍了C#中WinForm程序退出方法,实例总结了技巧退出WinForm程序窗口的各种常用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中WinForm程序退出方法技 ...

  7. LeetCode OJ Palindrome Number(回文数)

    class Solution { public: bool isPalindrome(int x) { ,init=x; ) return true; ) return false; ){ r=r*+ ...

  8. EF写INNER JOIN 链接

    面对多表的查询,一般都是多表连接后下面再写条件,但是有一种写法可以提升一下EF生成的语句的效率 首先先去查询每一个表,把每一个表对应的条件附加上去,注意:过滤数据最多的条件放在首先位置 var lt ...

  9. Android(java)学习笔记70:TabActivity使用

    1.首先我们要知道TabActivity是结合TabHost使用的,于是我们自然而然要说明一下TabHost 所谓的TabHost是提供选项卡(Tab页)的窗口视图容器. 此对象包含两个子对象: 一个 ...

  10. 单调队列 poj2823,fzu1894

    题目链接:http://poj.org/problem?id=2823 用RMQ超时了,我想应该是不会的,看discuss说,之前RMQ过了. 维护两个单调队列. 单调递减的队列,每插入一个时: 超过 ...