なにか問題設定が間違っている気がします。
int[A][B] と書きたいと言われても、C言語に型名 + 添え字という構文がありません。
int var[A][B]; と定義しておいて、var[a][b] という形の式で得られるのは int 型の値ですが。
var[192.68.8][24] と書きたいという意味ならそんなのC言語では無理ということになります。
---- ---- ---- ---- ---- ---- ---- ---- ----
x = var[0][24]; y = var[1][24] としたときに x = 192, y = 68 になるようにすることはできないこともないですが、こんなの使い道あるんでしょうか。単なる宿題?
で、このとき z = var[0][23] はなんになるのが正しいでしょう?
超解釈で書いてみたソースはこんな感じですが、問題を書き間違えている可能性が高いんじゃないかとは思いますのでもう一回問題を確認してください。。
#include <assert.h>
void generate_networks(int addr[4], int networks[4][33])
{
int i, j;
unsigned int mask;
unsigned int work;
for (j = 0; j <= 32; j++) {
mask = 0xffffffffU ^ ((1U << (32-j)) - 1);
for (i = 0; i < 4; i++) {
networks[i][j] = addr[i] & (mask >> (3 - i) * 8) & 0xff;
}
}
}
int main()
{
int addr[4] = {192, 68, 8, 0};
int networks[4][33];
generate_networks(addr, networks);
assert(networks[0][24] == 192);
assert(networks[1][24] == 68);
assert(networks[2][24] == 8);
assert(networks[0][16] == 192);
assert(networks[1][16] == 68);
assert(networks[2][16] == 0);
assert(networks[0][12] == 192);
assert(networks[1][12] == 64);
assert(networks[2][12] == 0);
return 0;
}
すみません。間違い&説明不足でした。回答の受付を一時停止しもう一度質問し直します。