
No.1ベストアンサー
- 回答日時:
標準関数にはありません。
作るなら、新たに現在の配列のサイズに要素1つ分のサイズを増やしたメモリ領域を新たに獲得し、そこに既存の配列をコピーしてから一番最後の要素に新しい要素を追加するしかありません。
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
void *array_push(void *ptr, int size, size_t unit_size, void *item) {
void *adr = malloc(unit_size * (size + 1));
memcpy(adr, ptr, unit_size * size);
memcpy((char *)adr + (unit_size * size), item, unit_size);
return(adr);
}
int main(void)
{
char array_one[] = {'0', '1', '2', '3', '4'};
char *array_ptr = array_one;
int array_size = sizeof(array_one) / sizeof(array_one[0]);
char additem = '5';
printf("配列の%d番目の要素は 0x%X ですよ\n",
array_size - 1, array_ptr[array_size - 1]);
array_ptr = (char *)array_push(array_ptr, array_size, sizeof(array_ptr[0]), &additem);
printf("新しい配列の%d番目の要素は 0x%X ですよ\n",
array_size - 1, array_ptr[array_size - 1]);
array_size++;
printf("新しい配列の%d番目の要素は 0x%X ですよ\n",
array_size - 1, array_ptr[array_size - 1]);
free(array_ptr);
getchar();
return(0);
}
No.3
- 回答日時:
Cの配列は固定長なので、「新たな要素を増やす」ことは不可能です。
動的にやりたければmallocとreallocを駆使するしかありません。
なおC++では、これを隠蔽するSTLのvectorテンプレートクラスが存在します。
No.2
- 回答日時:
ありません。
あきらめましょう。C言語の配列はその定義時に要素数(正確には配列が必要とするバイト数)が固定されてしまい、その要素数を後から変更することはできません。
cvSeqPushで末尾に新たな値を追加できるのは、その関数が扱う構造体CvSeqが要素の追加・削除を行える構造になっていて、関数内でいろいろと処理をやっているからです。
# opencvは知りませんでしたが、リファレンス(参考URL)を斜め読みしたところどうやら双方向リストを使用しているようです。
つまり、ただの配列に対して末尾追加を行っているわけではありません。
参考URL:http://opencv.jp/opencv-1.0.0/document/opencvref …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
在宅ワークのリアルをインタビュー
ベテラン在宅ワーカーと 在宅ビギナーの方々に、在宅ワークの実情をお教えいただきました。
-
C言語 配列の長さの上限
C言語・C++・C#
-
関数から配列を返すには?
C言語・C++・C#
-
e^(x^2)の積分に関して
数学
-
4
エラーの意味
C言語・C++・C#
-
5
複数桁10進数の*桁目だけを抽出したい
C言語・C++・C#
-
6
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
7
float型とdouble型の変数の違いを教えてほしいです
C言語・C++・C#
-
8
fopne で失敗する原因
C言語・C++・C#
-
9
配列の要素数に変数を入れたいときには
C言語・C++・C#
-
10
C言語のポインターに関する警告
C言語・C++・C#
-
11
整数データの配列から同じ値のデータを削除する関数
C言語・C++・C#
-
12
C言語初心者の質問失礼します。
C言語・C++・C#
-
13
fgetsで拾われる改行文字を削除したい
C言語・C++・C#
-
14
バッファとは何ですか
C言語・C++・C#
-
15
数字の位ごとの値を表示するプログラム
C言語・C++・C#
-
16
C言語のプログラムが実行できません。
C言語・C++・C#
-
17
define で 配列
C言語・C++・C#
-
18
C言語 配列の再初期化
C言語・C++・C#
-
19
エラーの意味は? Lvalue required
C言語・C++・C#
-
20
Macターミナルで実行中のプログラムを中止するには?
その他(プログラミング・Web制作)
関連するQ&A
- 1 C言語の配列にPushするには
- 2 動的配列のメリット・デメリット C言語で静的配列を用いた場合と、malloc関数で動的配列を用いた場
- 3 ポインタと配列について C言語で二次元の配列を利用しようと思うと 1.静的な二次元配列 2.ダブルポ
- 4 C言語 多次元配列(3次元配列)
- 5 c言語のファイルディスクリプタについて 現在c言語を学習している学生です。 c言語におけるファイルデ
- 6 C言語C++言語アセンブラ言語の就職先
- 7 C言語の配列をC++のvectorに高速に変換したい
- 8 c言語のポインタについて初心者です 構造体をポインタをポインタ配列に保存して、配列の番号を使ったりし
- 9 C#からC言語で作成したDLLに文字列の配列の受け渡しをする方法を教えて下さい
- 10 C言語の画像処理として使われるopencvとか、独自の関数ばかりでプログラムを書かれると見にくいので
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
CArrayのソート
-
5
特定の文からメールアドレスの...
-
6
verilogで、配列の一部をタスク...
-
7
【PHP】配列のキー名の修正は可...
-
8
連想配列で値が空だったら、要...
-
9
同一列内のセルを結合して表示...
-
10
C言語の配列をPush(追加)する...
-
11
forとかで連番の変数を一気に格...
-
12
mallocで char *型の配列を確...
-
13
System.String.Splitでエラー
-
14
CArrayの要素としてCStringArra...
-
15
phpのエラーについて
-
16
連想配列をループで作成するには
-
17
fgetc関数について
-
18
多次元配列の重複削除
-
19
特定のURLを正規表現で配列抽出...
-
20
pythonのnumpyでの繰り返しでの...
おすすめ情報