- 締切済み
ポインタのキャスト方法
D-Matsuの回答
- D-Matsu
- ベストアンサー率45% (1080/2394)
ibufの型はshort *でibuf_tmpの型は(short *)[10]です。 そのまま入れたら入る訳が無いとは思いませんか? キャストで無理矢理入れるのもやめましょう。異常動作の原因になります。
関連するQ&A
- 複雑なキャスト
"(int の要素数3の配列) へのポインタ" を意味するキャストはどのような書き方になりますか? (int*[3]) かと思ったのですが、コンパイルエラーになります。 参考までに、ソースをのせておきます。 pai や ai のようなよくわからない変数名は、 型が複雑なためそこだけハンガリアン記法っぽく書いています。 #include<stdio.h> // func は int の要素数3の配列 {0, 1, 2} の中の n 番目の要素を返す int func(int (*pai)[3], int n){ // pai means 'p'ointer to 'a'rray of 'i'nt. return (*pai)[n]; } int main(){ int ai[] = {0, 1, 2}; // ai means array of int. int i = func(&ai, 1); // 同じことを、先頭要素のポインタを経由してやりたい int *pi = &ai[0]; // pi means pointer to int. int j = func((int*[3])pi, 1); // "(int の要素数3の配列) へのポインタ" を // 意味するキャストがしたい // (int*[3]) ではエラーになる printf("Of course %d = %d.\n", i, j); return 0; }
- ベストアンサー
- C・C++・C#
- 配列のポインタ配列のポインタから元の配列を参照する方法について
C初心者です。下記の様に配列のポインタ配列を作って、そのポインタ配列のポインタを返すコードを書いて、main関数で元の配列の値を参照したいのですが、上手く参照できずに困っています。下記のコードの問題点も含めて、配列のポインタ配列のポインタから、元の配列の値を参照する方法を教えてください。お願い致します。 short int *motion_data(void) { short int data1[5][7] = { {2377,2174,0,0,0,0,0}, {2377,2377,2784,2648,2648,2648,2377}, {2377,2377,2784,2648,2648,2648,2377}, {2377,2377,2377,2377,2377,0,0}, {2377,2377,2377,2377,2377,0,0}, }; short int data2[5][7] = { {2377,2174,0,0,0,0,0}, {2377,2377,2919,2784,2784,2784,2377}, {2377,2377,2919,2784,2784,2784,2377}, {2377,2377,2377,2377,2377,0,0}, {2377,2377,2377,2377,2377,0,0}, }; short int *po_data[2]; po_data[0] = data1[0]; po_data[1] = data2[0]; return *po_data; }
- ベストアンサー
- C・C++・C#
- 警告をださずにポインタにnullを渡す方法は?
こんにちは。 ポインタ型の引数にNULLを渡してやりたいのですが 以下のような警告がでてしまいます。 test.c: In function 'test_': test.c:14: 警告: passing argument 2 of 'test' makes pointer from integer without a cast 問題の箇所は以下のように書いてます。 【test.c】 ~省略~ /** プロトタイプ **/ 7 void aaa(int,int*,int*); ~省略~ 14 aaa(0,NULL,&tv); NULLを渡したい場合、警告をださないように スマートに記述するにはどうしたらいいでしょうか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ポインタ
文字列"apple", "orange", "strawberry"へのポインタをポインタ配列の各要素に代入した後,その文字列の文字を逆順に表示するようにプログラムを考えているのですが、 while文の中のjはそれぞれについて考える必要がありますか? ポインタを使って文字数を数得られそうですが出来ませんでした。 [実行例] ポインタ配列[0]の文字列の逆はelppaです. ポインタ配列[1]の文字列の逆はegnaroです. ポインタ配列[2]の文字列の逆はyrrebwartsです. #include<stdio.h> #define COUNT 3 int main(void) { char * words[COUNT] = {"apple", "orange", "strawberry"}; int i, j; for(i = 0; i < COUNT; i++) { j = ? ; printf("ポインタ配列[%d]の文字列の逆は", i); while( ? ) { printf("%c", *(words[i] + j)); j--; } printf("です.\n"); } return 0; }
- ベストアンサー
- 情報工学
- 関数へのポインタ渡しでの配列の初期化について
はじめまして、C言語の基本的な質問をさせてください。 C言語で、外部関数へポインタで引数を渡す場合に、 関数に渡されるのはアドレスですよね? で、渡された関数側でそのポインタの配列の初期化を するときにはアドレスだけの情報だと、要素数がいくつ あるか分からず、領域の破壊をしてしまいそうな気が するのですが?いかがでしょうか? また、関数かなんかで、配列の要素数が分かる関数が あったような気がするのですが、それもアドレスだけ でわかるのでしょうか?
- ベストアンサー
- C・C++・C#
- ポインタみたいなもの
Perlってポインタは利用できないんですよね。配列の要素を1つ1つ処理していってその要素の内容によって更にその配列に要素を指定した順番に追加しながら処理していくような処理を実現するにはどうしたらよいのでしょうか。C言語だったら線形リストでできるのですが。
- ベストアンサー
- Perl
- C#でポインタのポインタを作りたい
昔VC++で作ったDLLをC#で使おうと思ったのですが、なんと、その引数がint**型です。 やっていることは、intの配列がありまして、その配列の特定の要素のアドレスを納めた配列を使っています。 具体的には(型や関数記述は大まかに書きます) --------------------------------- int **array; int *item; array = calloc(10, sizeof(int)); item = calloc(1000, sizeof(int)); for (i = 0; i < 10; i++) { array[i] = item + i+100; } --------------------------------- とした、arrayを引数にしています。 これをC#から使おうとして、C#ではint**をどうするんだろうと思った次第です。 わからないのは、C#でどうやってアドレスを配列に入れるかです。 array[i] = &item[width*i] とすると、コンパイル段階で怒られてしまいますし... 知恵をお貸しください。
- ベストアンサー
- C・C++・C#
補足
どうもやり方にムリがあるようですね。 ご指摘ありがとうございます。