Являются ли эти размеры правильными для массива переменных и массива указателей на переменные? - PullRequest
1 голос
/ 22 июля 2011

Правильны ли размеры и операторы для всего массива, указанного в комментариях в приведенном ниже коде?

//gArray uses sizeof(char)*100 = 1*100 = 100 bytes.
char gArray[100];

//gArray uses sizeof(char)*100*50 = 1*100*50 = 5000 bytes.
char gArray[100][50];

//gArray is a 2D array, each element is a pointer to a char (although
//char data type is irrelevant).
//gArray uses sizeof(void*)*100*50 = (4 or 8) * 100 * 50 = 20000 or 40000 bytes.
char* gArray[100][50];

Спасибо.

Ответы [ 3 ]

6 голосов
/ 22 июля 2011

sizeof(char) по определению 1, поэтому это будет 100, 5000 и 20000 или 40000 (в большинстве систем 128 + битные указатели не запрещены стандартом).

2 голосов
/ 22 июля 2011

Вы просто распечатываете значения:

char gArray1[100];

char gArray2[100][50];

char* gArray3[100][50];

std::cout << "gArray1  " << sizeof(gArray1) << "\n"
          << "gArray2  " << sizeof(gArray2) << "\n"
          << "gArray3  " << sizeof(gArray3) << "\n";

Я получаю:

gArray1  100
gArray2  5000
gArray3  40000
0 голосов
/ 22 июля 2011

sizeof(char) определяется как всегда равный 1 по стандарту c ++, если я правильно помню.Так что нет, это неверно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...