АК
Size: a a a
АК
BU
АК
AG
SK
SS
VS
T[N][M]
это T[N*M]
, начало expr.add#4.2 однозначно говорит о том, что арифметика указателей не будет работать для всех элементов двумерного массива одновременноT[N][M]
это массив массивов. как в нормативном тексте, так и в примечанияхSK
W
ПК
АК
int a[3]
int* p = &a[0];
(p+10)-10
- мы может и получим тот же указатель с точки зрения здравого смысла, однако это UB, если я правильно помню.W
ПК
VS
int a[3]
int* p = &a[0];
(p+10)-10
- мы может и получим тот же указатель с точки зрения здравого смысла, однако это UB, если я правильно помню.IZ
IA
#include <iostream>
void foo(int* array, size_t size);
int main() {
int array[3][5] = {0};
foo(array[0], 15);
return 0;
}
void foo(int* array, size_t size) {
for (int i = 0; i < size; ++i)
std::cout << *(array + i) << std::endl;
}
проблема как по мне скорее в том что это по сути оверхед, и далеко не самый чистый код, с очевидным поведением (в боевых условиях), плюс легко налажать с границами чисто по невнимательности, если масив из кучи, если вам совесть позволяет использовать это или вы твердо убеждены что без этого никак то кто же вам запретит, но мне кажеться это скорее личный выор каждого, так что не вижу о чем тут можно спорить, если я не прав и что то не так понял, то прошу прощения, не бейте палкамиVS
#include <iostream>
void foo(int* array, size_t size);
int main() {
int array[3][5] = {0};
foo(array[0], 15);
return 0;
}
void foo(int* array, size_t size) {
for (int i = 0; i < size; ++i)
std::cout << *(array + i) << std::endl;
}
проблема как по мне скорее в том что это по сути оверхед, и далеко не самый чистый код, с очевидным поведением (в боевых условиях), плюс легко налажать с границами чисто по невнимательности, если масив из кучи, если вам совесть позволяет использовать это или вы твердо убеждены что без этого никак то кто же вам запретит, но мне кажеться это скорее личный выор каждого, так что не вижу о чем тут можно спорить, если я не прав и что то не так понял, то прошу прощения, не бейте палками