C++指针的地址

问题描述

list_year=np.arange(2010,2015)
for i in list_year:
    df_fyr = pandas_df[pandas_df['Year']==i] # filter year
    geometry = [Point(xy) for xy in zip(df_fyr.Lon,df_fyr.Lat)] #create geometry 
    x_fyr_gdf = GeoDataFrame(df_fyr,crs="epsg:4326",geometry=geometry) #create geodataframe
    rasterized_x_fyr = make_geocube(vector_data=x_fyr_gdf,measurements = ['Day','X'],resolution=(-0.5,0.5)) # rasterize_points_griddata
    rasterized_x_fyr.rio.to_raster("rasterized_x_daily_"+str(i)+".tif")

输出

#include <iostream>

using namespace std;

int main(int argc,char** argv) {
    unsigned int a =5;
    unsigned int *pint = NULL;

    cout << "&a = " << &a << endl;
    cout << " &pint = " << &pint << endl;
}

我想知道为什么 &a = 0x6ffe04 &pint = 0x6ffdf8 的地址等于 pint0x6ffdf8一个 pint(4 个字节),它的地址不应该是 unsigned int 吗?

解决方法

您的 pint 不是无符号整数。它是一个指向无符号整数的指针。
指针可以有不同的大小,特别是可以有 8 的大小。
因此,它可以在 0x6ffe04 之前放入 0x6ffdfc。
但它也有更大的对齐需求,它需要一个可被 8 整除的地址,所以 0x...c 已出局,它需要例如0x...8

对于 463035818_is_not_a_number,我同意这不是真正可预测的,存在特定于实现的方面。这就是为什么我用“可以”、“想要”、“例如”来形容“轻柔地”......