为什么这段代码会删除前3个字符?

时间:2015-01-05 18:14:10

标签: c

我正在学习C而且我找到了这个程序,但我无法理解为什么它会删除前三个字符。这背后的数学是什么?

#include <stdio.h>
#include <conio.h>

void main(void){
    int *ptr;
    char *str="hello world";
    char *s_ptr;
    ptr = (int *)str;
    ptr++;
    s_ptr = (char *) ptr;
    printf("%s", --s_ptr);
    _getch();
}

2 个答案:

答案 0 :(得分:6)

您平台上的

sizeof(int)似乎是4个字节。执行ptr++时,由于指针ptr的类型为int而不是char,指针会增加4个字节,而不会增加1个字节。

答案 1 :(得分:0)

你正试图了解其原因。 char占用8位,也称为字节。一个整数在32台机器上占用4个字节。在C中,您可以对指针进行算术运算。当您编写ptr++时,ptr指向的地址将增加与其指向的类型相同的字节数。在您的情况下,它增加4个字节。下一行将s_ptr转换为char*s_ptr,指向o中的hello world。下一行减1,现在它指向l之前的o。其余的printf。所以请记住:你可以对指针进行算术运算,这取决于大小。