C语言学习笔记-指针

若触过汇编语言,那么理解学习C语言中指针就很简单了。指针,在汇编里面的表现形式,无非就是寻址,直接寻址和间接寻址。

先来学习下,  C语言中的4大类数据类型:
       基本类型:int,long,float,char
       构造类型:数组,结构体-struct,联合体-union, 枚举类型-enum
       指针类型:int*, long*, float*, char* 等等
       空类型 :void

       如上,指针是一种数据类型,如同整数型有int,long,float,short ,
       指针型下面也有int*,long*,float*, char*, struct* 等等。
       
       举例说明:定义一个int型指针。
       int a=12345;        //定义了一个整型变量a,同时给a赋值12345
       int* pa=&a;        //定义了一个指针名叫pa,它指向的是一个整数a。也可叫pa是个整型的指针。
       //对int 后面加个*,就表示这个变量pa,不是int整型了,而是整型指针了。
       &a表示取到变量a的地址, 这个地址一般是一个32位的数据,地址内放的值是12345。
       int* pa=&a;  表示把变量a的地址当做数据,赋值给变量pa。

       这里需要理解变量地址和地址存的数据(变量的值),这两个概念。
       地址就好比你家的地址,买东西要填写的收获地址;
       地址内的数据就好比你家的房子;

仔细看下面的代码:

我这里显示变量a的地址是0x0019 fedc ,地址值应该是4字节的,前面两00可以省略不显示的。

从上面的例子可以看到,指针变量pa地址内的存放的是 整型变量a的地址,也可以说变量pa的值是 变量a的地址。

而常说的-指针变量pa指向的值,在这里就是变量a的值=12345;  *pa 就是取值的意思,程序执行*pa的操作是,选取到pa内存的值,然后把这个值当做"地址",在去取这个“地址”内存放的值。

举个例子,说明下: 老板让你去客户的公司拿个材料(即从客户处取个数据), 但是没直接告诉客户公司的地址,咋整??

这时,老板说,客户公司的地址我写在我的笔记本上,但笔记本放在了我家里。 我这里给你个纸条,上面是我家的地址,你先到我家,拿到笔记本,看上面客户的公司地址,在去客户公司,把材料拿回来。

下面例子:指针的指针 int** p

    int a = 12345;        //定义个整数
    int* pa=&a;    //定义一个指针(整数型的),也叫一个指向整数的指针,也叫整数指针。

    int** ppa;    //一个指针,它指向的是"另外一个指针",另外一个指针指向的是一个整数。
                // 解释:* 表示ppa 是个指针,  int* 一个值想整数的指针
    ppa = &pa;  //ppa的值是 整型指针变量pa的地址。

    printf("变量a的地址=0x%x \n",&a);
    printf("变量a的值=%d \n",a);

    printf("变量pa的地址=0x%x \n",&pa);
    printf("变量pa地址内存的是=0x%x \n",pa);
    printf("变量pa是个整型指针,它指向的值=%d \n", *pa);

    printf("指针的指针ppa地址内存的值是=0x%x \n", ppa);    //变量pa的地址
    printf("*ppa=0x%x \n", *ppa);                            //变量a的地址
    printf("指针的指针ppa最终指向的值是=%d \n", **ppa); //变量a的值

//只要高兴,还可以跟多层的指针,暂时觉得没毛用

    int*** pppa;

    int**** ppppa;

    int aa[10] = {0,1,2,3,4,5,6,7,8,9};  //定义了一个数组,里面放了10个整数,aa也可叫整型数组
    int* bb[10]; //声明了一个数组叫bb,长度10.里面放的数据是整数指针。

    bb[0] = pa;  //bb[0] 是数组bb的第1个数据,它是整型指针。
                 //可以理解为 int* bb[0], bb[0] 是个变量名, 对比 int* pa. 
                 //所以可以有 bb[0]=pa;

    printf("变量a的地址=0x%x \n",&a);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值