Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 大/小端点上的指针减法_C_Cpu Architecture - Fatal编程技术网

C 大/小端点上的指针减法

C 大/小端点上的指针减法,c,cpu-architecture,C,Cpu Architecture,这是一个查找字符串长度的示例程序 { char *ptr="Autobiography Of Yogi"; char *a = ptr , *b = &ptr[20]; printf(" length is %d ", (b-a)+1 ); // subtracting pointers to find string length } 我的问题是,这个程序适用于Little和Big endian机器吗?是的,它很好。只有在查看较大整

这是一个查找字符串长度的示例程序

    {
      char *ptr="Autobiography Of Yogi";
      char *a = ptr , *b = &ptr[20];
      printf(" length is %d ", (b-a)+1 ); // subtracting pointers to find string length 
    }

我的问题是,这个程序适用于Little和Big endian机器吗?

是的,它很好。只有在查看较大整数的各个字节时,才会出现问题

  • 您正在处理角色,因此小端或大端不会出现在图片中。它仅对2个或更多字节的数据值有效

  • 指针的减法并不依赖于小端点或大端点


  • endianness对代码没有影响。但由于硬编码的
    20
    ,您的代码仍然很差。注意:指针减法会导致类型
    ptrdiff\u t
    ,这可能与
    int
    不同。便携式C99代码使用
    printf(“%td\n”,(b-a)+1)您的方法的主要问题是,为了使用它,您必须已经知道字符串长度。。。它是21,而不是20。@PaulOgilvie单个字节对Endianness不敏感,他正在减去字符指针。即使他在减去int指针,结果也将是相同的,不管端点是多少。这就是我在这里解释的内容。@Govind Parmar感谢您的编辑,但我将其回滚,因为我认为如果它显示“数据类型大于一个字节”,可能会导致混淆,因为例如字符串大于一个字节,但尾数并不重要。Endianness实际上只对整数(有时是浮点类型)重要。