我已经阅读了一些关于将int指针转换为char指针的帖子,但仍然有一个问题让我感到困惑。
我知道整数在大多数32位计算机上占用四个字节的内存,而字符占用一个字节的内存。将整数指针强制转换为char指针,它们会包含相同的地址吗?转换操作会改变char指针所指向的值吗?即,它只指向整数的前8位而不是全部32位吗?当我将int指针转换为char指针时,实际上发生了什么我感到困惑。
int a[20] = {0};
int *p = &a[3];
int *q = &a[13];
ptrdiff_t diff1 = q - p; // This is 10
如果将p
和q
转换为char
类型,你会得到它们之间的距离,单位是char
而不是int
:
char *x = (char*)p;
char *y = (char*)q;
ptrdiff_t diff2 = y - x; // This is 10 times sizeof(int)
x
和 y
是 int *
,那么 (char *)x - (char *)y
将等于 (x - y) * sizeof(int)
。也就是说,指针减法的结果会被指针所指向的类型的大小所缩小。根据定义,sizeof(char) == 1
。 - Ian Abbottp
并且它是int指针,则p ++
会增加它包含的地址4个字节。p
并且它是char指针,则p ++
会增加它包含的地址1个字节。int main(){
int* pi;
int i;
char* pc;
char c;
pi = &i;
pc = &c;
printf("%p\n", pi); // 0x7fff5f72c984
pi++;
printf("%p\n", pi); // 0x7fff5f72c988
printf("%p\n", pc); // 0x7fff5f72c977
pc++;
printf("%p\n", pc); // 0x7fff5f72c978
}
sizeof(char) == 1
。 - Carey Gregory