我正在学习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();
}
答案 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
。所以请记住:你可以对指针进行算术运算,这取决于大小。