为什么此代码删除前 3 个字符?
Why this code removes first 3 char?
我正在学习 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();
}
sizeof(int)
在你的平台上好像是4个字节。当您执行 ptr++
时,指针会增加 4 个字节,而不是您预期的增加 1 个字节,因为指针 ptr
的类型是 int
而不是 char
.
您正在尝试了解“如何”而不是“为什么”。一个 char 跨越 8 位,也称为一个字节。一个整数在 32 位机器上跨越 4 个字节。在 C 中,您可以对指针进行算术运算。当您写入 ptr++
时,ptr
指向的地址会增加与其指向的类型相同的字节数。在您的情况下,它增加了 4 个字节。下一行将 s_ptr
转换为 char*
(s_ptr
指向 hello world
中的 o
)。下一行减去 1,所以现在它指向 o
之前的 l
。 printf
完成剩下的工作。所以请记住:您可以对指针进行算术运算,这取决于大小。
我正在学习 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();
}
sizeof(int)
在你的平台上好像是4个字节。当您执行 ptr++
时,指针会增加 4 个字节,而不是您预期的增加 1 个字节,因为指针 ptr
的类型是 int
而不是 char
.
您正在尝试了解“如何”而不是“为什么”。一个 char 跨越 8 位,也称为一个字节。一个整数在 32 位机器上跨越 4 个字节。在 C 中,您可以对指针进行算术运算。当您写入 ptr++
时,ptr
指向的地址会增加与其指向的类型相同的字节数。在您的情况下,它增加了 4 个字节。下一行将 s_ptr
转换为 char*
(s_ptr
指向 hello world
中的 o
)。下一行减去 1,所以现在它指向 o
之前的 l
。 printf
完成剩下的工作。所以请记住:您可以对指针进行算术运算,这取决于大小。