我有以下代码:
#create the list of subject ids
SUB_IDS=['values']
# this is a pandas data frame of all subjects' information. Columns are:
#Sub_ID, NG,C,ER
asbs=pd.DataFrame(['Values'])
for x in SUB_IDS:
x_data=asbs[asbs['SUB_ID']==x]
x_ng=x_data['NG']
x_c=x_data['C']
x_er=x_data['ER']
a,b = sp.stats.kurtosistest(x_NG)
c,d = sp.stats.kurtosistest(x_C)
e,f = sp.stats.kurtosistest(x_ER)
kurtosis_scores.append([x,a,b,c,d,e,f])
# for somplicity we'll only focus on bootstrapping one feature variable
if b <=.05:
mean=x_ng.mean()
else:
sampled_means=[]
for x in range(1,10000):
g=np.random.choice(x_NG,size=len(x_NG),replace=True)
print(g)
g=np.mean(g)
sampled_means.append(g)
mean=sampled_means.mean()
“tab”位于从服装0x28FEF8开始的内存区域中。
我知道* ptr-1的值是49,&amp; tab的值是0x28FEF8。
有人能解释一下为什么“ptr”的值是0x28FF08吗?我猜它会是0x28FEFC。
提前谢谢你!
答案 0 :(得分:4)
如果我们&#34;画&#34;你的数组在内存中显示它看起来像
+----+----+----+----+----+ | 10 | 20 | 30 | 40 | 50 | +----+----+----+----+----+
然后你需要记住,数组自然地衰减到指向第一个元素的指针,即tab
等于&tab[0]
。然后你需要记住,对于任何数组或指针a
和索引i
,表达式a[i]
完全等于*(a + i)
。由此可以很容易地推断tab + 4
等于&tab[4]
,即指向第五个元素的指针。
因此,如果我们再次绘制数组,但现在使用指针:
+----+----+----+----+----+ | 10 | 20 | 30 | 40 | 50 | +----+----+----+----+----+ ^ ^ | | &tab[0] &tab[4] | &tab
如果&tab[0]
等于0x28fef8
,则&tab[4]
等于0x28fef8 + sizeof(int) * 4
,因为它指向int
数组的索引4,并且&确实是0x28ff08
。
请注意,虽然&tab[0]
和&tab
指向同一位置,但它们在语义上是不同的。 &tab[0]
是指向单个元素的指针,类型为int *
,而&tab
是指向数组的指针,类型为int (*)[5]
。
在相关说明中,打印void *
指针的正确格式为"%p"
。所以你的打印应该是
printf("%d,%p,%p. \n", *ptr-1, (void *) &tab, (void *) ptr);
请注意,实际需要转换为void *
。