C语言 指针

指针介绍:

        指针:指针变量,存储的是地址编号。

        地址编号:内存会按照字节进行编号,一个字节一个编号

        4G内存 === 4G字节

        int a = 10;   //10是空间里面存储的数值。

          // 空间的名字叫a

          // &a ----

简单使用指针:

        指针先定义再使用:

        指针定义格式:

        指针指向对象的数据类型 *指针名;  // 定义指针,开一个指针空间,

        a、指针指向对象的数据类型:看指针保存什么类型的地址。

        int a = 10;

        &a  --- 0062FE9C

        定义一个指针指向a,保存a的地址   --- int

         定义指针的时候*--- 代表指针的标记

        定义的这个变量不是普通的存放值的变量,这是一个指针变量,用来存储地址编号的。

        int *p;  // p是指针变量 ,用来存地址编号的。

        int p;  //  p是int型的变量,用来存int型的数据。

        指针名:

        指针空间的名字就是指针名.

        eg:

        int a = 10;   // &a --- 0x0062FE9C

        int *p;   // p指针指向a;

        p = &a;   // p指向了a ,   --- 指针有了明确指向后,就有了*p  --- *解地址 --- *p  == *(&a) == a

        指针空间和指针指向的空间

        指针本身空间 --- 存地址编号的, --- 指针名 --- 什么时候有  --- 定义指针的时候就有了

         指针指向的空间 --- 存储 数值     --- *指针名 --- 什么时候有 --- 给指针赋了地址值之后,指针           有了明确指向之后才有的。

指针空间大小:

        32位  --- --- 地址编号 4个字节

        64位  --- --- 地址编号 8个字

        指针空间大小和系统位数有关,与指向对象的数据类型无关。

        char *p1;

        short *p2;

        int *p3;

        double *p4;

        char (*s)[20];

        int (*func)(int a,int b)

        // 定义一个数组用来存储指针的

        char *arr[4];

        数组名:arr

        元素个数:4

        下标:0~3   

        数据类型:char *

        数组类型:char *[4]

        arr的空间大小:16 / 32

指针偏移运算:

        指针偏移和指向对象的数据类型有关,指向对象的数据类型 从 指针定义的格式 看

        指针偏移一般在数组里面用

        int a[] = {-1,20,3,40,60,100,45};

        定义一个指针指向a[0]

        指针指向对象的类型:int

        int *p = a;  // &a[0] 数组名就是数组首元素的地址。

        地址:  p       p+1

         &a[0]   &a[1]

        空间的名称:*p           *(p+1)   --- *解地址

       *(&a[0] )    *(&a[1])

指针分析:

        指针名:

         指针指向对象的类型除了 *指针名 剩下的就是它指向对象的类型

        指针类型:          除了 指针名 剩下的就是指针的类型。

        int *p;

        指针名:p

        指针指向对象的类型:int

        指针类型: int *

        char (*s)[20];

        指针名:s

        指针指向对象的类型:char [20]

        指针类型: char (*)[20]

        int (*func)(int a,int b);

        指针名:func

        指针指向对象的类型:int (int a,int b);

        指针类型: int (*)(int a,int b)

指针遇上强转:

        int a = 0x12345678;

        int *p = &a;

        // char *p = &a;   指针类型不稳定  

        eg:

        #include<stdio.h>

        int main()

        {

                int a = 0x12345678;

                char *p = (char *)&a;

                printf("%#x %#x %#x %#x\n",*(p+0),*(p+1),*(p+2),*(p+3));  0x78  0x56  0x34  0x12

                return 0;

        }

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值