Есть два вопроса:
Печать указателей будет печатать адрес для кнопки int*
и string*
, но распечатает содержимое для char*
, поскольку в operator<<
имеется специальная перегрузка. Если вам нужен адрес, используйте: static_cast<const void *>(&c);
int
и string
равна 8
На вашей платформе sizeof(int)
есть 4
, а sizeof(char)
- 1
, поэтому вам действительно нужно спросить, почему 8
не 5
. Причина в том, что строка выравнивается по 4-байтовой границе. Машины работают со словами, а не с байтами, и работают быстрее, если слова не поэтому «разделяют» несколько байтов здесь и несколько байтов. Это называется выравниванием
. Ваша система, вероятно, выравнивается с 4-байтовыми границами. Если у вас 64-разрядная система с 64-битными целыми числами, разница будет 16.
(Примечание: 64-разрядная система обычно относится к размеру указателя, а не к int. Таким образом, 64- битной системы с 4-байтовым int все равно будет иметь значение 8 как 4 + 1 = 5, но округляется до 8. Если sizeof (int) равно 8, тогда 8 + 1 = 9, но это округляет до 16)
Просто X.insert (i, Y) работает.
def parseX(a, len):
X = []
for i in range(len):
### Split based on 0th column's value being (i+1)
Y = a[ a[:,0] == i+1, :][:, [1,2]]
print(Y.shape)
X.insert(i, Y)
#print(len(X))
return X