嵌入式C语言--C语言指针

一、指针概述

        内存类型资源地址、门牌号代名词。

        指针:地址的代名词

        指针变量:存放指针这个概念的盒子。

        C语言编译器对指针这个特殊的概念,有两个疑问?

                1、分配的一个盒子,盒子要多大?                       

                        在32bit系统中,指针就是4字节。

                2、盒子存放的地址,所指向的内存读取方法是什么?

                        首先根据指针获取地址,然后根据*前面的修饰符获取一次处理的地址长度。

                        1GB        

                        2^10        1K

                        2^20        1M

                        2^30        1G

        指针指向的内存空间,一定要保证合法性。

二、指针+修饰符

const

        常量、只读【不能变】

        内存属性:

                1、内存操作的大小(int、char ....)。

                2、内存的变化,可读可写(const)。

        char *p;

        const char *p; 【T】        p指向的内容“不可修改”,可以修改指向的位置。

        char const *p;

        char * const p;【T】        p指向的地址不可修改,可以修改指向的内容。【硬件资源】

        char *p const; 

         const char * const p;        【ROM】

        char *p = "hello world!\n";        ===========> const char *p = "hello world!\n";

        *p = 'a';        非法,会出现段错误。

volatile

        防止优化,指向内存地址。每次读取都会去读取指定地址内的数据,而不会优化去读缓存中的数据。

        char *p;

        volatile char *p;

typedef

        别名。

        char *name_t;                //name_t是一个指针,指向了一个char类型的内存。

        typedef char *name_t;   //name_t是一个指针类型的别名,指向了一个char类型的内存。

        name_t abc;

三、指针+运算符

++、--、+、-

        int a = 100;

        a + 1;                //100 + 1

        int *p = xxx ;       //[0x12]地址

        p+1;                        //[0x12 + 1*sizeof(*p)]地址

        指针的加法、减法运算,实际上加减的是一个单位,单位大小可以使用sizeof(p[0])。

        p++        p--:更新了p的地址。

[ ]

        变量名[n]

        n:ID标签号

        地址内容的标签访问方式。

        取出标签里的内存值。

---------------------------------------------------------------------------------------------------------------------------------

const int a = 0x12345678;

int b = 0x11223344;

a = 100;                                //编译器报错。

int *p = &b;                            

*(p + 1) = 100;                        // a = 100,使用指针越界可以修改const变量的值。变量内存从高地址分配。

逻辑操作符

==、!=

        1.跟一个特殊的值进行比较。        0x0(NULL):无效值,结束标志

         2.指针必须是同类型的比较才有意义(用的非常少)。

四、多级指针

        int **p;

        存放地址的地址空间(存放地址的内存里面存放的也是一个地址)。

        p[m] == NULL;结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值