当前位置:   article > 正文

关于指针_(某值 & 0x200) == 0x200

(某值 & 0x200) == 0x200

指针的一些基础知识
1、指针的定义
数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。

对于普通变量,在内存中需要通过占用内存的某个地址的。因此指针可以通过这个内存地址去找到这个变量。
假设定义一个char a = ‘K’;,该a变量在内存地址0x110下存储了字符’K’。我们如何通过指针来找到字符a所对应的值呢?
可以通过指针变量char *p; p=&a;也就是说我们先定义一个char类型的指针p,我们通过把a的地址0x110赋值给了p,注意指针变量需要的是一个地址,通过&可以取变量a的地址。指针变量p本身也是有一个内存地址的,假设为0x200,那么在内存地址0x200下存储了变量a的地址0x110,我们通过 *p就可以取出0x110内存地址下所对应的值了。

在指针定义时的*是指针的定义格式,给指针变量赋值时不需要带 *,定义完后对指针进行*操作就是取指针存储的地址下所对应的内容。

//定义普通变量
float a = 99.5, b = 10.6;
char c = '@', d = '#';
//定义指针变量
float *p1 = &a;
char *p2 = &c;
//修改指针变量的值
p1 = &b;
p2 = &d;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

*是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带*。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上*,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带*,给指针变量赋值时不能带*
假设变量 a、b、c、d 的地址分别为 0X1000、0X1004、0X2000、0X2004,下面的示意图很好地反映了 p1、p2 指向的变化:
在这里插入图片描述
2、如何通过指针变量取得数据
指针变量存储的时数据的地址,通过指针变量就能获得该地址上的数据。就是*符号,对指针进行操作。

#include <stdio.h>
int main(){
    int a = 100, b = 999, temp;
    int *pa = &a, *pb = &b;//在定义时就把变量的地址赋值给了指针
    printf("a=%d, b=%d\n", a, b);
    /*****开始交换*****/
    temp = *pa;  //将a的值先保存起来
    *pa = *pb;  //将b的值交给a
    *pb = temp;  //再将保存起来的a的值交给b
    /*****结束交换*****/
    printf("a=%d, b=%d\n", a, b);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

输出的结果
a=100, b=999
a=999, b=100
3、关于*和&
假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a&*pa分别是什么意思呢?

*&a:&a是取了变量a的地址也就是指针pa,*&a就是取该地址下的数据也就是*pa,也就是变量a所对应的数据。*&a=a
&*pa*pa就是取变量a,&*pa就是取变量a的地址,也就是指针变量pa。&*pa=pa

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/编程探险家/article/detail/63206?site
推荐阅读
相关标签
  

闽ICP备14008679号