c指针加减值得问题

    (1)指针加减整数:一度很疑惑数据指针在同种机器和编译器下长度是相同的,但是不同类型指针加上同一个整数之后值却不一样。

   int main(void)
{
int num;
char c ;
int * a = #
char* str= &c;
printf("%d\n", sizeof(void *));
printf("%d  %d\n", sizeof(int *), sizeof(char *));
printf("%d   %d\n", sizeof(a), sizeof(str));
printf("%x   %x\n", a, str);
printf("%d   %d\n", sizeof(*a), sizeof(*str) );
++a;
++str;
printf("%x %x\n", a, str);
return 0;
}


    后来想通了,指针长度相同是存储的地址,需要同样的字节数来存储指针指向地址值。当指针加整数时目的一般是寻找指向的值而不是为了计算无用的地址值,应该是出于这种考量,c标准规定了给指针加上一个整数实际上加的数是这个整数和指针数据类型对应字节数的乘积。虽然规定为加整数就为地址加上实际的整数同样可以人为控制乘以数据类型对应字节数,但是可能这样一般并没有意义,出于简单目的,于是就有了这个顶。
    减去整数同加法。

(2)两个指针相减:这样会得到两个地址的差值。通常这个差值没有什么用,但是一般可以用来判断数组中的元素顺序呢。应该出于这个用处的目的,指针差值规定为它们之间相差的“单位”数,即指向数据类型的单位数。实际计算为地址差值/sizeof(类型)。


    以上的标准规定是准确的,一些想法是自己的理解,如果错了希望不要误导他人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值