导航:

  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. hdu 3586 最小代价切断根与叶子联系

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3586 http://blog.csdn.net/woshi250hua/article/details ...

  2. cf868F. Yet Another Minimization Problem(决策单调性 分治dp)

    题意 题目链接 给定一个长度为\(n\)的序列.你需要将它分为\(m\)段,每一段的代价为这一段内相同的数的对数,最小化代价总和. \(n<=10^5,m<=20\) Sol 看完题解之后 ...

  3. mybatis springmvc批量删除 2最新

    service层: @Override public void batchDeletes(List list) { creditDao.batchDeletes(list); } 控制层control ...

  4. android listview 加载遇到的问题

    http://blog.csdn.net/l_serein/article/details/7706338 转载: 描述一下场景: 菜单栏上有若干分类,点击每一个分类,ListView下分根据分类显示 ...

  5. 那些年我用过的SAP IDE

    在Google上根据关键字"程序员鄙视链"搜索,会得到68多万条结果. 玲琅满目的搜索结果里是众多不同维度划分的鄙视链. 其中有一个维度,就是编程工具的鄙视链,比如: 而我在SAP ...

  6. 转载:手把手教你搭建 vue 环境

    以下内容转自: https://segmentfault.com/a/1190000008922234 第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安 ...

  7. HTTP的三次握手

    在讲三次握手之前,希望大家理解一个概念,什么概念呢? 就是在我们的客户端和我们的服务器之间进行http请求,发送和返回的过程当中,我们是需要去创建一个tcp connection的东西,因为http是 ...

  8. 1.4 NBU配置备份策略(Policy)

    1.4 配置备份策略(Policy) 一个备份策略由四部分组成. Attributes(属性) Policy是否Active Policy类型 由此Policy产生的任务的优先级 使用的Storage ...

  9. Android Support v4,v7,v13的区别和应用场景

    android-support-v4 是谷歌推出的兼容包,最低兼容Android1.6的系统,里面有类似ViewPager等控件.ViewPager在Android 1.6以下的版本是不自带的,所以要 ...

  10. C++STL之vector向量容器

    vector向量容器   vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...