
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言語 exitの使い方
C言語・C++・C#
-
関数から配列を返すには?
C言語・C++・C#
-
C言語・要素除去
C言語・C++・C#
-
-
4
C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して
C言語・C++・C#
-
5
C言語のポインターに関する警告
C言語・C++・C#
-
6
構造体のメンバをfor文で回したい
C言語・C++・C#
-
7
配列の要素数に変数を入れたいときには
C言語・C++・C#
-
8
C言語 配列の長さの上限
C言語・C++・C#
-
9
C言語初心者の質問失礼します。
C言語・C++・C#
-
10
バッファとは何ですか
C言語・C++・C#
-
11
C言語において、 配列要素をひとつずつ前にずらすコード
C言語・C++・C#
-
12
C言語 エラーの原因がわからないので,見てほしいです
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
System.String.Splitでエラー
-
STLのvectorで作った配列をメン...
-
forとかで連番の変数を一気に格...
-
MYSQLとPHPによって取得する多...
-
配列を指定した順序でソート
-
プルダウンメニューにDBの内容...
-
String だと「 ByRef引数の型が...
-
配列を回すとき、最後の要素だ...
-
チェックボックスが複数選択で...
-
マッチング処理(1:N)
-
$_SESSIONに二次元配列を使える...
-
multiple属性のPOSTを配列で受...
-
複数行のデータのPOST処理に関して
-
エラーメッセージ(無効な間接...
-
タブ区切りのデータでnullのデ...
-
漢字のソートについて
-
配列同士の足し算のループ処理
-
ログファイルが一定行数を超え...
-
phpの関数について質問です!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
cakephpでのトランザクション処...
-
行列
-
読み(あ行~わ行)ごとに分け...
-
特定の文からメールアドレスの...
-
c言語 単位行列
-
STLのvectorで作った配列をメン...
-
多次元配列をエンコードする関...
-
2次元配列を1次元配列にするには
-
phpで、配列の値が意図せず変わ...
-
Delphiで別unitで宣言した「TAr...
-
連想配列に追加ってできるン?
-
正規表現
-
配列の並びについて
-
PHPでCSVを出力するさいに、ル...
-
pascalについて知りたいのです...
-
文字列の取得について
-
ファイルの書き込みについて教...
-
数独かを判断するプログラム
-
文字列の並び替え
おすすめ情報