大丈夫も何も、32ビットアプリとしてコンパイルすればよいだけじゃね?
64ビットアプリにしたいのなら、それなりに修正は必要かと。
64 ビット環境で int が 32 ビットってところが
今までと違う所なんだよな。
今まではレジスタサイズ変わろうが、
int がレジスタサイズと同じだったから何とかなった。
まあ、ちゃんとやってる人なら
C99 になる前から intptr_t みたいなのを定義して
使ってるんだろうけど、
別の制約で使えない可能性もなきにしもあらず、か。
ソース丸投げ乙
面白いソースだな
勉強中の俺には参考になる
struct[0]を消すときはそこにstruct[1]を代入
struct[1]にstruct[2]を代入
for(i=0;i<入力済み構造体数li++){
構造体[i]=構造体[i+1];
}
をやればいいんじゃね?
958 :
955:2005/12/20(火) 11:12:26
ちょっとスレ違いっぽかったですね。
学校の課題なので、宿題スレで質問することにします。
質問です。
gmtime(3)のような関数は内部でtm構造体を作って、
その構造体へのポインタを渡していると考えてもいいんでしょうか?
>>960 ありがとうございます。見逃していました。
volatile int a,b;
void test0(void)
{
a = b = 0;
}
をコンパイルした時、
b = 0;
a = b;
になるコンパイラって正しいんでしょうか?
b = 0;
a = 0;
になることを期待してて、bは実際には書き込んだ値と違う値が読み出される
ハードウェアで、aに0でないヘンな値が入ってるらしいとハマりました。
実装依存ってやつでしょうか…?
>>962 =は右結合なので
b = 0;
a = b;
が正しい
>>962 > a = b = 0;
は「a = ( b = 0 );」と言うこと。
つまり、式「b=0」の結果が代入されるのであって、
> b = 0;
> a = 0;
とは等価ではない。
a、b共に0を代入したいのなら、
> b = 0;
> a = 0;
と書くのが正解。
965 :
デフォルトの名無しさん:2005/12/20(火) 18:46:08
ダブルポインタってどういうときに使うのですか?
というと
普通に使ってるじゃん
int main(int argc; char **argv)
{
}
とか
int *a[];
とか
たぶん実際のアルゴリズムの中で使われてるところを見たいんでしょう
多次元配列扱うときとか
ダブルポインタなんてものはない。
ポインタを理解できていない香具師のいいわけだ。
その証拠に、「トリプルポインタは自信ないですけどダブルポインタならばっちりです」などと言い出す。
多次元配列なんてものはない。
あるのは配列の配列だけだ。
ポインタのポインタ?
ダブルポインタって変数aのアドレスを指すポインタのアドレスを指すポインタのことか?
そうらしい
975 :
962:2005/12/20(火) 19:24:09
>>966 ハードウェアは LPC2214 という ARM7 CPU で、問題のレジスタは
Timer0 の Interrupt Register というものです。
http://www.semiconductors.philips.com/acrobat/usermanauls/UM_LPC2114_2124_2212_2214_2.pdf この CPU に関して言えば、読み出しと書き込みで値が異なるのは
当り前にある様です。
>>964 >は「a = ( b = 0 );」と言うこと。
>つまり、式「b=0」の結果が代入されるのであって、
その通りだと思うのですが、件のコンパイラ(arm-elf-gcc 4.0.0) は
b=0 をやったあと、0 はレジスタに残ってるのに、わざわざ b を
読み出してきてその値を a に代入するということをやっていました。
volatile だとこうなる方が普通なんでしょうか。
別の言い方をすると、「「b=0」の結果」とは、右辺の 0 とは限らず、
代入後に左辺の変数を読み出すという実装も有り得るということでしょうね。
結果を使わない場合はもちろん読み出さないので、私には不自然に思えますが、
言語として仕様を満たしてない訳ではないということでしょうか。
別の CPU 用の別のコンパイラ(YCSH 4.07)で試してみると、普通に
b=0;
a=0;
というコードが出ていました。
とにかく実装依存と思うことにし、今後気をつけます。
質問です。
配列[5]を宣言又はnewで作成。
中身
[0] a
[1] b
[2] c ←削除
[3] d
[4] e
↓
[0] a
[1] b
[2] d
[3] e
[4]
↓
[0] a
[1] b
[2] d
[3] e
[4] f ←追加
<5> g ←追加
こういう配列操作をしたいのですが、
追加時は別配列で作り直さないと駄目でしょうか?
newで作成ってどういうこと?
なんで、5よりも大きい配列が必要だって最初からわかっているのに、配列の大きさを5にするんだ?
配列のMAXが最初からわかっているなら、その大きさで配列を確保すればイイじゃん。
可変配列でないとダメならvectorだろ。
>>979 可変配列を作りたかったのです。
vectorって言葉は知らなかったのですが、
検索したところCStringArrayってのを使えば出来そうですね。
ありがとうございました。
あ、>980踏んでたけどこれから帰るから誰か宜しく。
>>975 b = 0;
a = b;
なら aに0が入ってないとおかしい。
>「「b=0」の結果」とは、右辺の 0 とは限らず
この場合は仕様を満たしたコンパイラなら必ず0になる。
b+=0とかならともかく
>>965 木構造への挿入・削除はポインタのポインタを使わないとやたら面倒
再帰で書いていいなら話は別だが
どうも馬鹿共の言うダブルポインタには (*a)[] は含まれないようですね
>>988 『「b=0」の結果』は、bに0を代入した結果。
つまり、bの値を読み出してaに入れるのは当然だろう。
この時、bを読むと0になるかならないかは環境依存。
>>991 っつーか、ポインタのこと理解出来てれば
「ダブルポインタ」の様な変な用語は使わんだろう。
不毛すぎる厨房どもw
997 :
デフォルトの名無しさん:2005/12/20(火) 23:41:13
C言語のエキスパートの方はWindowsプログラミングにも強いと思って質問します。
UnicodeのウィンドウにIMEを使って文字を入力する時、
入力された文字をWM_IME_COMPOSITIONやWM_IME_CHARを使わずにWM_CHARで正確に
文字が取得できますでしょうか??
ちなみにOSはWindows2000です。XPだと取れるっぽいのですが、Windows2000だと
私の環境はだと、とれないっぽいのですが、みなさんいかがでしょうか??
スレ違いなら、他で質問します。
すっかりスレ違いです
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。