相关疑难解决方法(0)

C中空指针的指针算法

当一个指针到特定类型的(比如int,char,float,..)被递增,其值增加该数据类型的大小.如果void指向大小数据的指针x递增,它如何获得指向x前面的字节?编译器如何知道添加x指针的值?

c pointers void-pointers pointer-arithmetic

162
推荐指数
7
解决办法
11万
查看次数

C/C++:指针算术

我正在阅读Pointer Arithmetic中的一些内容,我遇到了两件我无法理解的事情,也不知道它的用途

address_expression - address_expression
Run Code Online (Sandbox Code Playgroud)

并且

address_expression > address_expression
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下,它们是如何工作的以及何时使用它们.

编辑:

我想说的是,如果我只取两个地址并减去它们,它们会产生什么

如果我拿两个地址并比较它们的结果或基于的比较

编辑:我现在明白了减去地址的结果,但比较地址我仍然没有得到它.

我理解1 <2,但是地址如何比另一个更大,他们在比较什么

c c++ math pointers pointer-arithmetic

12
推荐指数
3
解决办法
1万
查看次数

两个指针变量之间的差异

我在书面测试中问了这个问题.在我的lapi上运行下面的代码时,我得到10作为输出

#include<stdio.h>
int main()
{
  int *i, *j;/* two pointer variable*/
  i = (int *)60;
  j = (int *)20;
  printf("%d \n",i-j);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

10 
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么输出10.

c pointers pointer-arithmetic

7
推荐指数
2
解决办法
7001
查看次数

不同类型指针之间的减法

我试图找到两个变量之间的内存距离.具体来说,我需要找到char []数组和int之间的距离.

    char data[5];
    int a = 0;

    printf("%p\n%p\n", &data[5], &a);

    long int distance = &a - &data[5];

    printf("%ld\n", distance);
Run Code Online (Sandbox Code Playgroud)

当我在没有最后两行的情况下运行我的程序时,我得到了两个变量的正确内存地址,如下所示:

   0x7fff5661aac7
   0x7fff5661aacc
Run Code Online (Sandbox Code Playgroud)

现在我明白了,如果我没错,两者之间有5个字节的距离(0x7fff5661aac8,0x7fff5661aac9,0x7fff5661aaca,0x7fff5661aacb,0x7fff5661aacc).

为什么我不能减去类型(int*)和类型(char*)之一的指针.两者都是指内存地址..我该怎么做才能计算两者之间的距离,以字节为单位?我尝试了两个指针中的一个,但它没有用.

我得到:" 错误:'char*'和'int*'不是兼容类型的指针 ".谢谢大家都会帮助我

c pointers subtraction pointer-arithmetic

3
推荐指数
1
解决办法
2379
查看次数

算术运算符如何处理c中的地址?

int main(void){
   int arr[] = {1, 2, 3, 4, 5, 6};
   printf("%p\t%p\t%d\n",arr,arr+1,(arr+1)-arr);
   return 0;
 }
Run Code Online (Sandbox Code Playgroud)

输出:

  0x7ffe583f4ba0    0x7ffe583f4ba4  1
Run Code Online (Sandbox Code Playgroud)

为什么差异1?不应该是4.

c pointers

0
推荐指数
1
解决办法
67
查看次数