gpt4 book ai didi

C 指针算术对于 char * 和 int * 不同

转载 作者:行者123 更新时间:2023-11-30 19:57:36 25 4
gpt4 key购买 nike

有人可以解释为什么我可以使用以下代码移动 char * 的内存位置,但不能移动 int * 的内存位置:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
int * a = malloc(48);
char * s = malloc(27);

for (int i = 0;i<26;i++) s[i] = i+65;

int intSize = sizeof(int);
printf("%d\n",intSize);

for(int i = 0;i<12;i++){
a[i] = i;
printf("%d %d %c\n",*(a+i*intSize),a[i],*(s+i));
}


return 0;
}

最佳答案

当你声明一个变量时,例如

int* a;
char* b;

所有偏移量最终都以字节偏移量计算,偏移量的大小取决于类型。

所以 a + 1 实际上是 a + sizeof(int) 并且 b + 1 实际上是 b + sizeof (字符)

编译器会处理这个问题,它使阅读代码变得更容易,否则在循环数组等时您总是必须计算类型有多少字节

关于C 指针算术对于 char * 和 int * 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41772460/

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