【初心者歓迎】C/C++室 Ver.49【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/02/20(水) 12:33:41ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1202141921/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0951デフォルトの名無しさん
2008/02/27(水) 21:16:08参照にするしかないな。
string y = "*****", &x = y;
0952デフォルトの名無しさん
2008/02/27(水) 21:16:480953デフォルトの名無しさん
2008/02/27(水) 21:18:110954デフォルトの名無しさん
2008/02/27(水) 21:19:46アドレス演算子の結果は右辺値だと思った。
0955デフォルトの名無しさん
2008/02/27(水) 21:21:38int *ap = &a;
int *bp = &b;
ap = bp;
0956デフォルトの名無しさん
2008/02/27(水) 21:25:39何でそう言う事がしたいの?
0957デフォルトの名無しさん
2008/02/27(水) 21:36:280958デフォルトの名無しさん
2008/02/27(水) 21:38:060959デフォルトの名無しさん
2008/02/27(水) 21:40:37string x,y="...";
#define x y
0960デフォルトの名無しさん
2008/02/27(水) 21:43:17とした場合、最適化で x と y が同一視される可能性はあるんじゃないかな。
0961デフォルトの名無しさん
2008/02/27(水) 21:47:24変数のアドレスは、変数が確保されたときに固定されるものだろ。
「すでに確保された変数のアドレスを書き換えるテク」を期待する目的がわからん。
0962デフォルトの名無しさん
2008/02/27(水) 21:50:290963デフォルトの名無しさん
2008/02/27(水) 22:22:39class 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を指したままかわりません。
参照戻しではできたのですが、これで出来ない理由がわからず気持ち悪いです。
どなたか原因のご教授お願いします。
0964デフォルトの名無しさん
2008/02/27(水) 22:23:37vector<bool (*func)(int)> EroeroFunction;
↑<>の中のカッコが悪戯してうまくコンパイルが通らなくて困ってます。
構造体に関数ポインタを入れればなんとかなるんですが、メンバが1つしかないのでなんとも。
0965デフォルトの名無しさん
2008/02/27(水) 22:27:29どっちかつかえ。
< 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;
}
0966デフォルトの名無しさん
2008/02/27(水) 22:27:58get関数内でobj_s2を書き換えても、呼び出し側のobj_s2は書き換わらない。
関数に引数を渡す際の基本だろ?
ポインタを書き換えたいなら、ポインタをアドレス渡しでもすればいい。
void get( CSample2** ppobj_s2 ) { *ppobj_s2 = &m_obj_s2; }
obj_s1.get( &obj_s2 );
0967デフォルトの名無しさん
2008/02/27(水) 22:29:45vector<bool (*)(int)> じゃないの?
0968デフォルトの名無しさん
2008/02/27(水) 22:33:46そういう関数ありますか
0969デフォルトの名無しさん
2008/02/27(水) 22:34:45言ってる意味が分からない。
0970デフォルトの名無しさん
2008/02/27(水) 22:35:220971デフォルトの名無しさん
2008/02/27(水) 22:36:14std::copyとstd::back_inserterを組み合わせるんじゃねーの?
0972デフォルトの名無しさん
2008/02/27(水) 22:36:42こういうこと?
vector<char> v1, v2;
v1.insert(v1.end(), v2.begin(), v2.end()); // v1の末尾にv2の全要素を追加
0973デフォルトの名無しさん
2008/02/27(水) 22:37:22x={1,2,3}
y={4,5,6}
x.push_back(y)={1,2,3,4,5,6}
こういうやつです
0974デフォルトの名無しさん
2008/02/27(水) 22:39:200975デフォルトの名無しさん
2008/02/27(水) 22:41:490976デフォルトの名無しさん
2008/02/27(水) 22:42:56operator+=を外部に定義しておくと便利かも
0977デフォルトの名無しさん
2008/02/27(水) 22:47:040978デフォルトの名無しさん
2008/02/27(水) 23:07:18配列でポインタ表現を使ってアクセスしてインクリメントようと思って
*(array+i)++としたら'++'には左辺値が必要です、とエラーが出てきました
これは配列で宣言したからだと思うんですが
ポインタで宣言した場合は値が飛び飛びになるので、*(array+i)みたいな表現できないでしょうし
どうすればいいでしょう?
0979デフォルトの名無しさん
2008/02/27(水) 23:09:43++*(array+i);
変なことになったらとりあえず優先順位を疑うのは基本。
0980デフォルトの名無しさん
2008/02/27(水) 23:10:19*(array+i++) // iを増やす場合
0981デフォルトの名無しさん
2008/02/27(水) 23:11:350982デフォルトの名無しさん
2008/02/27(水) 23:12:23できました。ありがとうございます。
優先順位って今まで全然気にしてませんでしたので
今後注意して行こうと思いますorz
0983デフォルトの名無しさん
2008/02/27(水) 23:14:10それはともかく、array[i]++; と書けばいいのに
何でそうしないのか本気で理解できない。
0984デフォルトの名無しさん
2008/02/27(水) 23:27:310985デフォルトの名無しさん
2008/02/27(水) 23:30:030986デフォルトの名無しさん
2008/02/27(水) 23:39:05array++[i]; ←等価→ *((array++)+i) ←等価→ i[array++];
i++[array]; ←等価→ array[i++]; ←等価→ *(array+i++);
0987デフォルトの名無しさん
2008/02/27(水) 23:40:43誰だよこんな書き方見つけた奴……
0988デフォルトの名無しさん
2008/02/27(水) 23:43:59*(array+i) と *(i+array) が等価なのと同じく
array[i] と i[array] も等価だべ。
0989デフォルトの名無しさん
2008/02/27(水) 23:44:30で、誰?
0990デフォルトの名無しさん
2008/02/27(水) 23:45:420991デフォルトの名無しさん
2008/02/27(水) 23:45:54x+=y;
と
memcpy(&x[N],&y[0], y.size()); N+=y.size;
は同じのはず
yがバイナリデータだと上が失敗することが多いです
0992デフォルトの名無しさん
2008/02/27(水) 23:47:15すげぇwwww感動したwwwwwww
0993デフォルトの名無しさん
2008/02/27(水) 23:49:12x のメモリ確保はどこ行った。
0994デフォルトの名無しさん
2008/02/27(水) 23:50:050995デフォルトの名無しさん
2008/02/27(水) 23:50:49stringに文字列以外入れるなよ。
あと、x.capacity() >= y.size() でないとmemcpyがメモリ壊すぞ。
0996デフォルトの名無しさん
2008/02/27(水) 23:51:46同じというなら、同じになるコードを書けよ。
0997デフォルトの名無しさん
2008/02/27(水) 23:53:00できる理由は全然考えたことがなくて、今はじめて理解したw
0998デフォルトの名無しさん
2008/02/27(水) 23:53:19memcpyの方は書き出して復元できますが、+=はまれに正常でほとんど壊れます
原因はなんでしょう
0999デフォルトの名無しさん
2008/02/27(水) 23:55:24vectorを使わずstringを使ったから。
1000デフォルトの名無しさん
2008/02/27(水) 23:55:3210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。