gpt4 book ai didi

c - 我假设下面的 C 代码做了一些事情。但它没有按照我的假设工作。请检查我的假设有什么问题?

转载 作者:行者123 更新时间:2023-11-30 21:26:31 25 4
gpt4 key购买 nike

代码是:

#include<stdio.h>
main()
{
char arr[]={'a','b','c','d'};
char *i,*j,*k;
i=&arr[1];
j=&arr[2];
k=&arr[3];
printf("%s %p %p %p %s\n",(j-i)'i,j,k,(k-i));
}
  1. 当我尝试编译此文件时,显示的错误是 %s 需要 (char *)但它是(即(j-i))是int。但是我想我将j&i定义为char指针那么怎么办(j-i)变为整数。

  2. 如果我使用 %d 而不是 %s,则 (j-i) 的答案为 1,(k-i) 的答案为 2实际上是元素差异。这是怎么发生的。

  3. 当我使用 %p 打印 i、j、k 的地址时,它会得到正确的地址但是为什么不能减去 2 个地址来得到它们的字节差呢?

请说出你的观点?

编辑:为有关指针差异的问题的第二部分添加代码:

#include<stdio.h> 

main()
{
int arr[]={10,20,34,65};
int *i,*j,*k;
i=&arr[1];
j=&arr[2];
k=&arr[3];
printf("%d %p %p %p %d\n",(j-i),i,j,k,(k-i));
}

最佳答案

因为没有人费心写出实际的答案:

  1. 从另一个指针中减去指针会得到指针的差值,作为整数。

  2. 指针值的差异在于指向类型的大小(当您考虑intptr++ 的作用时,这一点是显而易见的)。

  3. 要获得字节差异,请乘以类型的大小,例如 (sizeof int)*(j-i)

关于c - 我假设下面的 C 代码做了一些事情。但它没有按照我的假设工作。请检查我的假设有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15042215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com