[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/31 10:23 / Filesize : 243 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.49【環境依存OK】



1 名前:デフォルトの名無しさん [2008/02/20(水) 12:33:41 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1202141921/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

960 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:43:17 ]
string y = "*****", &x = y;

とした場合、最適化で x と y が同一視される可能性はあるんじゃないかな。

961 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:47:24 ]
>>957
変数のアドレスは、変数が確保されたときに固定されるものだろ。
「すでに確保された変数のアドレスを書き換えるテク」を期待する目的がわからん。

962 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:50:29 ]
論理アドレスくらいなら書き換えることは可能かもしれない。

963 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:22:39 ]
class CSample2{};

class CSample
{
public:
  void get( CSample2 *obj_s2 ){obj_s2 = &m_obj_s2
private:
  CSample2 m_obj_s2;
};

main{
  CSample1 obj_s1;
  CSample2 *obj_s2 =NULL;
  obj_s1.get( obj_s2 );
}

これでmain内のobj_s2がobj_s1.m_obj_s2と同じ物を指すようにしたかったのですが、NULLを指したままかわりません。
参照戻しではできたのですが、これで出来ない理由がわからず気持ち悪いです。
どなたか原因のご教授お願いします。


964 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:23:37 ]
vectorに関数ポインタを格納するにはどうしたらいいでしょうか?

vector<bool (*func)(int)> EroeroFunction;
 ↑<>の中のカッコが悪戯してうまくコンパイルが通らなくて困ってます。

構造体に関数ポインタを入れればなんとかなるんですが、メンバが1つしかないのでなんとも。

965 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:27:29 ]
かなりのFAQ。引数経由でポインタを戻すなら、ポインタのポインタかポインタ参照か
どっちかつかえ。

<  void get( CSample2 *obj_s2 ){obj_s2 = &m_obj_s2

>  void get( CSample2 *&obj_s2 ){obj_s2 = &m_obj_s2;}

>  void get( CSample2 **obj_s2 ){*obj_s2 = &m_obj_s2;
}

966 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:27:58 ]
>>963
get関数内でobj_s2を書き換えても、呼び出し側のobj_s2は書き換わらない。
関数に引数を渡す際の基本だろ?
ポインタを書き換えたいなら、ポインタをアドレス渡しでもすればいい。
void get( CSample2** ppobj_s2 ) { *ppobj_s2 = &m_obj_s2; }
obj_s1.get( &obj_s2 );

967 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:29:45 ]
>>964
vector<bool (*)(int)> じゃないの?

968 名前:デフォルトの名無しさん [2008/02/27(水) 22:33:46 ]
vector<char>って後方に同じ型を連結できますか
そういう関数ありますか



969 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:34:45 ]
>>968
言ってる意味が分からない。

970 名前:デフォルトの名無しさん [2008/02/27(水) 22:35:22 ]
push_backでは一つしか増やせません 一度に増やすやつないですか

971 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:36:14 ]
>>968
std::copyとstd::back_inserterを組み合わせるんじゃねーの?

972 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:36:42 ]
>>968
こういうこと?
vector<char> v1, v2;
v1.insert(v1.end(), v2.begin(), v2.end()); // v1の末尾にv2の全要素を追加


973 名前:デフォルトの名無しさん [2008/02/27(水) 22:37:22 ]
vector<int> x,y;

x={1,2,3}
y={4,5,6}

x.push_back(y)={1,2,3,4,5,6}

こういうやつです

974 名前:デフォルトの名無しさん [2008/02/27(水) 22:39:20 ]
それでできますかサンクス

975 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:41:49 ]
まんまinsertでいいんじゃね?

976 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:42:56 ]
insertやね
operator+=を外部に定義しておくと便利かも

977 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:47:04 ]
要素の連結か、要素ごとの+=か曖昧なので、そんなのいらんかも

978 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:07:18 ]
C言語なんですが
配列でポインタ表現を使ってアクセスしてインクリメントようと思って
*(array+i)++としたら'++'には左辺値が必要です、とエラーが出てきました
これは配列で宣言したからだと思うんですが
ポインタで宣言した場合は値が飛び飛びになるので、*(array+i)みたいな表現できないでしょうし
どうすればいいでしょう?



979 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:09:43 ]
(*(array+i))++;
++*(array+i);

変なことになったらとりあえず優先順位を疑うのは基本。

980 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:10:19 ]
*((array++)+i) // arrayを増やす場合
*(array+i++) // iを増やす場合

981 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:11:35 ]
*(array+i) と array[i] は優先順位以外は等価。

982 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:12:23 ]
>>979
できました。ありがとうございます。
優先順位って今まで全然気にしてませんでしたので
今後注意して行こうと思いますorz

983 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:14:10 ]
>>979>>980 のどちらを意図してるんだろうか。

それはともかく、array[i]++; と書けばいいのに
何でそうしないのか本気で理解できない。

984 名前:デフォルトの名無しさん [2008/02/27(水) 23:27:31 ]
i++[array]と書くのが漢

985 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:30:03 ]
漢すぎるwwwwww

986 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:39:05 ]
(*(array + i))++; ←等価→ array[i]++; ←等価→ i[array]++;
array++[i]; ←等価→ *((array++)+i) ←等価→ i[array++];
i++[array]; ←等価→ array[i++]; ←等価→ *(array+i++);

987 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:40:43 ]
はじめて見た。
誰だよこんな書き方見つけた奴……

988 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:43:59 ]
*(E1+E2) と E1[E2] の挙動は等価だと規格に書いとるべ。
*(array+i) と *(i+array) が等価なのと同じく
array[i] と i[array] も等価だべ。



989 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:44:30 ]
array[i]を*(array+i)の糖衣構文とすることを発案した人が真っ先に見つけただろうな。
で、誰?

990 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:45:42 ]
(i % 16)["0123456789ABCDEF"]

991 名前:デフォルトの名無しさん [2008/02/27(水) 23:45:54 ]
string x,y; N=0; x.resize(0); に対して

x+=y;

memcpy(&x[N],&y[0], y.size()); N+=y.size;

は同じのはず
yがバイナリデータだと上が失敗することが多いです

992 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:47:15 ]
>>990
すげぇwwww感動したwwwwwww

993 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:49:12 ]
>>991
x のメモリ確保はどこ行った。

994 名前:デフォルトの名無しさん [2008/02/27(水) 23:50:05 ]
メモリ確保はあらかじめしておいてください あと最後にNでresizeも

995 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:50:49 ]
>>991
stringに文字列以外入れるなよ。
あと、x.capacity() >= y.size() でないとmemcpyがメモリ壊すぞ。

996 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:51:46 ]
>>994
同じというなら、同じになるコードを書けよ。

997 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:53:00 ]
変な入門書で配列のとこにすぐにその記法が説明してあったからできるのは知ってたけど、
できる理由は全然考えたことがなくて、今はじめて理解したw

998 名前:デフォルトの名無しさん [2008/02/27(水) 23:53:19 ]
zipファイルを少しずつyに入れてからxに足し込むんですけど
memcpyの方は書き出して復元できますが、+=はまれに正常でほとんど壊れます
原因はなんでしょう



999 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:55:24 ]
>>998
vectorを使わずstringを使ったから。

1000 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:55:32 ]
なんで文字列じゃないものをstringに入れるんだ。

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef