проблема в том, что при сборке сишным компилятором этот массив имеет один размер, при сборке C++ - другой.
простите, что?
#!/bin/bash
function sizeof_arr()
{
echo "sizeof("
for i in 1 2 3 4; do
echo "${i}3=%li 7${i}=%li"
done
echo ")"
}
function arr()
{
for i in 1 2 3 4; do
echo ", sizeof(arr${i}3), sizeof(arr7$i)"
done
}
for j in 1 2 4 8 16; do
for i in "gcc c" "g++ cpp" "clang c" "clang++ cpp" ; do
for o in "-O0" "-O1" "-O2" "-O3" ; do
a=($i)
echo '#include <stdio.h>
#pragma pack(push,'$j')
int arr13[1][3];
int arr23[2][3];
int arr33[3][3];
int arr43[4][3];
int arr71[7][1];
int arr72[7][2];
int arr73[7][3];
int arr74[7][4];
#pragma pack(pop)
int main()
{
printf("compiler:%10s, optimize:%3s, pack:%3s, '$(sizeof_arr)'\n","'${a[0]}'","'$o'","'$j'"'$(arr)');
return 0;
}
' >main.${a[1]}
${a[0]} $o main.${a[1]} -o out.${a[0]}
./out.${a[0]}
done
done
done
Я балдю, народ не то, шо читать, а даже гуглить разучился.
Ну спроси уже у гугла multidimensional arrays in C
Ссылка на PDF со стандартом (хоть K&R, хоть C99) находится в гугле с полпинка.
Найти в этом стандарте описание размещения многоразмерных массивов по оглавлению даже дебилу по силам.
или запись будет не такая сладкая[/quote
Вовсе не обязательно.
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned n, m, i, j, k;
scanf("%u%u", &m, &n);
int (*buf)[n] = (int (*)[n]) malloc(sizeof(int[m][n]));
for (i = 0, k = 0; i != m; ++i)
for (j = 0; j != n; ++j, ++k)
buf[i][j] = k;
for (i = 0; i != m; ++i) {
for (j = 0; j != n; ++j)
printf(" %d", buf[i][j]);
puts("");
}
return 0;
}