HACKER
TALK
Home
Channels
beta
Bookmarks
Messages
Notifications
Sign In
bLueriVerLHR
bLueriVerLHR
bLueriVerLHR
bLueriVerLHR
Math is of vital importance
Joined 3 years ago
0 Following0 Followers
JulyAugSeptOctNovDecJanFebMarAprMayJune
PostsCommentsChannels
bLueriVerLHR
bLueriVerLHR
·3 years ago

如果你是说把一个double数组的首地址给一个int指针p的话,这个操作在C++上需要使用强制类型转换,在C上不需要。

然后,p++操作只会移动4个字节,同时不应该报错,这是可以通过编译并运行的。这个操作理解成换了一种方式解释double数组吧?

bLueriVerLHR
bLueriVerLHR
·3 years ago

在64位机上用32位gcc编译指针大小是4个字节,而64位gcc编译指针大小是8个字节。

指针的加减操作和它指向的类型有关。比如他如果指向一个一字节的数据,那么加减操作是以一字节为单位的,比如如下代码输出是99

#include <iostream>

int main() {
    char a[100];
    char *p1 = a;
    char *p2 = &a[99];
    std::cout << p2 - p1;
    return 0;
}

而下面代码输出是24

#include <iostream>

int main() {
    char a[100];
    char *p1 = a;
    char *p2 = &a[99];
    std::cout << (int *)p2 - (int *)p1;
    return 0;
}
bLueriVerLHR
bLueriVerLHR
·3 years ago

Branchless Programming in C++ presented by Fedor Pikus at CppCon 2021 就有讨论这些,并展示如何将程序变得有更少的跳转语句,也即减少短路逻辑和分支跳转

Terms of ServicePrivacy PolicyCookie PolicyMarkdown SyntaxUser PointsUser Feedback© 2025 Shware Inc.