Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128899
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 191
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-16 11:31
个人简介

嵌入式新人

文章分类

全部博文(38)

文章存档

2016年(38)

我的朋友

分类: 嵌入式

2016-07-20 19:52:22

1    指针的本质

 指针全称指针变量,简称指针,实质仍是变量,和普通变量没有本质区别,唯一特别之处就是指针的值是另一个变量(指针所指向的存储单元)的地址,通过指针可以访问/修改这个变量的值。

2    指针的使用

     指针使用三部曲:定义指针、关联指针、引用指针。


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int a = 23;
  5. int *p; // 定义指针,
  6. p = &a; // 关联指针,指针p指向变量a
  7. *p = 555; //引用指针
  8.  
  9. printf("p = %p.\n", p); // 使用%p打印指针
  10. printf("p = 0x%x.\n", p); //使用%x打印指针
  11.  
  12. }

      指针的值须是另一个变量的地址,不能是普通的数值,如果想把普通数值赋值给指针,则须将普通数值进行强制类型转换。



点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int a,*p;
  5. a = 33;
  6. p = 33; // 编译报错,原因是指针的值须是另一变量的地址,而不是int型的数值,即指针的值须是有地址属性的数值。
  7. p = (int *)33; // 编译通过,原因是将33强制转换成(int *)型,相当于通知编译器,这个33是int型变量的地址,具有地址属性,编译通过。
  8. return 0;
  9. }


3    为什么需要指针

      指针是为了实现间接寻址。

      间接寻址是CPU设计时决定的,也就决定了汇编语言必须能够实现间接寻址,如ARM汇编的间接寻址,MOV R1, [R2]

      进而又决定了汇编之上的C语言也必须实现间接寻址,因此指针出现了。

      JavaC#等高级语言没有指针,也可以实现间接寻址的原因是语言本身对"指针"进行了封装,没有显式表现出来。


阅读(1246) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~