массивтің өлшемі және көрсеткіштің өлшемі нені білдіреді?

Жақында кодты соққыға ұшырадым және ол шатастырады

 static string const dirs[6] = {"-n", "-ne", "-se", "-s", "-sw", "-nw" };
 int a = sizeof(dirs)/sizeof(*dirs);

Және 6 массивтің массасына тең болады.

Менің сұрағым:

  1. sizeof (dirs) дегеніміз не? Жалпы массаның өлшемі

  2. мөлшері (* dirs) дегеніміз не?

2
Кем дегенде екіншісі массивтер .
қосылды автор chris, көзі
Егер сіз C ++-дегі массивтермен айналысқанды талап етсеңіз, бұны істеудің әдеттегі жолы әдетте келесідей: template size_t arraylen (T (&) [N]) {return N; }
қосылды автор Jerry Coffin, көзі
Егер сіз C ++-дегі массивтермен айналысқанды талап етсеңіз, бұны істеудің әдеттегі жолы әдетте келесідей: template size_t arraylen (T (&) [N]) {return N; }
қосылды автор Jerry Coffin, көзі
@JerryCoffin: келесіге constexpr қосыңыз: P.
қосылды автор Mooing Duck, көзі
Сіздің сүйікті C ++ кітабыңызда қандай sizeof және қандай sizeof туралы не айтады?
қосылды автор AnT, көзі
Сіздің сүйікті C ++ кітабыңызда қандай sizeof және қандай sizeof туралы не айтады?
қосылды автор AnT, көзі
Менің сүйікті өрнек күнді дұрыс қолданбау - «көрсеткіштің өлшемі». Бұл шын мәнінде не дегенге жақын емес. (Yay, сіз осыдан гөрі, сізде жақсы кішкентай -1).
қосылды автор user529758, көзі
Менің сүйікті өрнек күнді дұрыс қолданбау - «көрсеткіштің өлшемі». Бұл шын мәнінде не дегенге жақын емес. (Yay, сіз осыдан гөрі, сізде жақсы кішкентай -1).
қосылды автор user529758, көзі

9 жауаптар

what does sizeof(dirs) represent? Is the size of the total array?

Иә ол сондай.

what does sizeof(*dirs) represent?

*dirs is same with dirs[0], so sizeof(*dirs) is the size of the first element. (well ,the size of every element because they are the same)

sizeof(dirs)/sizeof(*dirs) will be the number of elements in the array.

2
қосылды
what does sizeof(dirs) represent? Is the size of the total array?

Иә ол сондай.

what does sizeof(*dirs) represent?

*dirs is same with dirs[0], so sizeof(*dirs) is the size of the first element. (well ,the size of every element because they are the same)

sizeof(dirs)/sizeof(*dirs) will be the number of elements in the array.

2
қосылды
  1. sizeof(dirs) represents the size of the entire array
  2. sizeof(*dirs) represents the size of a single element of the array

Осылайша, sizeof (* dirs) * элементтердің саны = sizeof (dirs), себебі элементтер саны * әр элементтің өлшемі = бүтін массаның өлшемі

Осылайша, элементтер саны = sizeof (dirs)/sizeof (* dirs).

2
қосылды
« sizeof (* dirs) массивтің бір элементінің өлшемін білдіреді» - дәлірек айтқанда, бірінші.
қосылды автор user529758, көзі
  1. sizeof(dirs) represents the size of the entire array
  2. sizeof(*dirs) represents the size of a single element of the array

Осылайша, sizeof (* dirs) * элементтердің саны = sizeof (dirs), себебі элементтер саны * әр элементтің өлшемі = бүтін массаның өлшемі

Осылайша, элементтер саны = sizeof (dirs)/sizeof (* dirs).

2
қосылды
« sizeof (* dirs) массивтің бір элементінің өлшемін білдіреді» - дәлірек айтқанда, бірінші.
қосылды автор user529758, көзі

Сілтемеде өлшем операторы қолданылған кезде, нәтиже объектінің өзі үшін қолданылған өлшеммен бірдей болады.

Егер құрастырылмаған массив құрылымның соңғы элементі болса, sizeof оператор құрылымның өлшемін массивсіз қайтарады.

Оператордың мөлшері жиі пішіннің өрнегін қолдана отырып жиым элементтерінің санын есептеу үшін қолданылады:

sizeof array/sizeof array[0]
0
қосылды

Сілтемеде өлшем операторы қолданылған кезде, нәтиже объектінің өзі үшін қолданылған өлшеммен бірдей болады.

Егер құрастырылмаған массив құрылымның соңғы элементі болса, sizeof оператор құрылымның өлшемін массивсіз қайтарады.

Оператордың мөлшері жиі пішіннің өрнегін қолдана отырып жиым элементтерінің санын есептеу үшін қолданылады:

sizeof array/sizeof array[0]
0
қосылды

sizeof operator yields the size in bytes of the provided operand. Since *dir is equal to dir[0] the sizeof(*dirs) will return the size of the first array element in bytes wile sizeof(dirs) will return the size in bytes of all array. Hence when you divide those numbers you get the number of elements in array.

More on sizeof operator: http://en.wikipedia.org/wiki/Sizeof http://en.cppreference.com/w/cpp/language/sizeof and http://msdn.microsoft.com/en-us/library/4s7x1k91(v=vs.110).aspx

0
қосылды

Жоғарыда келтірілген жауаптардан бір маңызды ерекшелік мынада, егер dirs функциясына берілсе, sizeof (* dirs) массивтің бір элементінің өлшемі болады, бірақ sizeof dirs ортаңыздағы көрсеткіштің өлшемін бағалайды. Себебі функцияға өтіп кеткен массив функцияның ішінде қолданылған кезде көрсеткіш болып табылады.

0
қосылды

Жоғарыда келтірілген жауаптардан бір маңызды ерекшелік мынада, егер dirs функциясына берілсе, sizeof (* dirs) массивтің бір элементінің өлшемі болады, бірақ sizeof dirs ортаңыздағы көрсеткіштің өлшемін бағалайды. Себебі функцияға өтіп кеткен массив функцияның ішінде қолданылған кезде көрсеткіш болып табылады.

0
қосылды