3、指针变量的运算、指针变量所占字节问题

1.指针变量的运算

指针变量不能相加 不能相乘 也不能相除
如果两个指针变量指向的是同一块连续空间中的不同存储单元
则这两个指针变量才可以相减
# include <stdio.h>

int main(void)
{
    int i = 5;
    int j = 10;
    int * p = &i;
    int * q = &j;
    int a[5];
    p = &a[1];
    q = &a[4];
    printf("p和q所指向的单元相隔%d个单元
", q-p);//p和q所指向的单元相隔3个单元

    //p - q 没有实际意义

    return 0;
}

2、一个指针变量占几个字节(非重点)

预备知识:
  sizeof(数据类型)
  功能:返回值就是该数据类型所占的字节数
  例子:sizeof(int)=4 sizeof(char)=1
     sizeof(double)=8


  sizeof(变量名)
  功能:返回值是该变量所占的字节数

  假设p指向char类型变量(1个字节)
  假设q指向int类型变量(4个字节)
  假设r指向doub1e类型变量(8个字节)
  请问:pqr本身所占的字节数是否一样?
    答案:pqr本身所占的字节数是一样的

总结:
  一个指针变量,无论它指向的变量占几个字节该指针变量本身只占四个字节   一个变量的地址是用该变量首字节的地址来表示
/*---------------------------------------------------------------------
一个指针变量占几个字节的问题
-----------------------------------------------------------------------
p、q、r只存放了第一个字节的地址,但p、q、r占4个字节
因为第一个编号地址需要4个字节去保存
cpu控制内存有32根线即32位,8位一个字节,即4个字节去控制每一个单元地址
----------------------------------------------------------------------*/
# include <stdio.h>

int main(void)
{
    char ch = 'A';
    int i = 99;
    double x = 66.6;
    char * p = &ch;
    int * q = &i;
    double * r = &x;

    printf("%d %d %d
", sizeof(p), sizeof(q), sizeof(r));

    return 0;
}

/*------------------------------------
    输出结果:
            4 4 4
            Press any key to continue
-------------------------------------*/
原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/12639356.html