
ポインタ勉強中です。
これを関数にしたいのですが
ファイルからaとa2を読み込んで
その値をmainでまた別の関数に入れようと考えています。
#include <stdio.h>
int main(){
int i, j;
unsigned char a[16]= {
0x00, 0x11, 0x22, 0x33,
0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xaa, 0xbb,
0xcc, 0xdd, 0xee, 0xff};
unsigned char a2[16]= {
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b,
0x0c, 0x0d, 0x0e, 0x0f};
unsigned char b[4][4], a3[4][4], c[4][4];//配列格納用
/* インプット */
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){
b[i][j]=a[i+(j*4)];
printf(" %02x",b[i][j]);
}
printf("\n");
}
printf("\n");
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){
key1_1[i][j] = a2[i+(j*4)];
printf(" %02x",a2[i][j]);
}
printf("\n");
}
printf("\n");
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){
c[i][j] = (b[i][j] ^ a3[i][j]);
}
}
}
このような感じにしたいです。
int main(){
int i,j;
unsinged char bin1[16]={0};
unsinged char bin2[16]={0};
ファイル読み込み 省略
kansuu(bin1,bin2,hoge);
for(i=0,i<4;i++){
for(j=0,j<4;j++){
printf("%02x",hoge[i][j]);
}
}
void kansuu(unsigned char a,unsigned char b,unsigned char c){
3つ用意してa,bを入れるとcが返ってくるような
もしくはそのほかいい方法があれば教えていただけるとありがたいです。
No.1ベストアンサー
- 回答日時:
大きさが決まっていて、どうしても配列を使いたいなら、
unsigned char hoge[4][4];
と宣言した上で、kansuu()は次のような宣言になります。
void kansuu(unsigned char *a, unsigned char *b, unsigned char c[4][4]);
多次元配列を関数の引数に取る場合、一番左の元以外は数を指定してあげないといけません。
これでもOKです。
void kansuu(unsigned char *a, unsigned char *b, unsigned char c[][4]);
ちなみに、*aでOKなのは、1次元配列(つまり一番左の元だけ)だからです。
なぜそうじゃなくてはいけないかというと、多次元配列の場合、右の元から順に実際に格納する相対位置を決めているので、これらの相対位置が決まらないと関数内部で直線的なメモリの番地に対応させることができなくなるためです。
回答ありがとうございます。
多次元配列だと相対位置等がかかわってくるんですね、勉強になります。
c[][4]の右の元というのは[0][4]の位置を見てるということでしょうか?
大きさが決まっていなくて配列を使わない場合についてはどうしたらいいのでしょうか?
No.3
- 回答日時:
2つの配列の排他的論理和を別の配列に格納する関数を作るのであれば、
関数内では全て1次元配列として処理するのが単純で分かりやすいかと。引数に要素数を追加しています。
以下、例です。
void kansuu(unsigned char *in1ptr, unsigned char *in2ptr, unsigned char *outptr, int length)
{
while (length--) {
*outptr++ = *in1ptr++ ^ *in2ptr++;
}
}
void main(void)
{
unsigned char bin1[16] = {
0x00, 0x11, 0x22, 0x33,
0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xaa, 0xbb,
0xcc, 0xdd, 0xee, 0xff,
};
unsigned char bin2[16] = {
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b,
0x0c, 0x0d, 0x0e, 0x0f,
};
unsigned char hoge[4][4];
int i, j;
for (i = 0; i < sizeof(bin1); i++) {
printf("%02x", bin1[i]);
}
printf("\n");
for (i = 0; i < sizeof(bin2); i++) {
printf("%02x", bin2[i]);
}
printf("\n");
kansuu(bin1, bin2, &hoge[0][0], sizeof(bin1));
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
printf("%02x", hoge[i][j]);
}
}
printf("\n");
}
回答ありがとうございます。
このようなやり方もあるんですね。
参考になります。
この方が同じ1次元でやりやすいですね。
今後このようなやり方もとりいれてみます。ありがとうございます。
今回はすいませんが最初に当初の回答いただいたNo1さんをベストアンサーにさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual C++を 用いたテキストフ...
-
VBのByte配列をVARIANTに格納し...
-
C++で経過日の計算
-
C言語(サイズ指定のない配列)
-
配列ポインタの関数中のメモリ領域
-
Visual Studioのタイマ処理を使...
-
VC6.0で作成したDLLでVBからの...
-
プログラミングに関する問題が...
-
配列の要素数に変数を入れたい...
-
C言語の配列のコピーについて質...
-
STLを使わずに可変長配列を再現...
-
eを小数第200位くらいまで求...
-
配列要素の値の入れ替え
-
構造体の変数の取り方を教えて...
-
Greedy Searchのプログラムにつ...
-
C# pictureBox(a)
-
クラスのデータメンバ?
-
c言語について、 配列の画像の...
-
ヒストグラムのプログラム
-
// c のポインタと配列について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
C言語 ファイルの指定された行...
-
C言語において、 配列要素をひ...
-
C言語の課題が出たのですが自力...
-
C#で配列が空かを判定するには?
-
構造体のextern方法
-
C言語の配列のコピーについて
-
c言語 構造体
-
C言語 数値の連続入力について
-
MFC - ダイアログボックスのPic...
-
C++DLLからC#へのコールバック...
-
配列のアドレス部
-
要素数・要素の値が未定の配列...
-
C言語についてです 5人のテスト...
-
.NET C++で、構造体の配列をnew...
-
2番目の最大値を求める
おすすめ情報
key1_1[i][j] = a2[i+(j*4)];のkey1_1についてa3の間違いでした。