応援メッセージ待ってます! (´;ω;`) 0868デフォルトの名無しさん (ワッチョイ 6dc3-Ja3g)2017/10/21(土) 10:51:19.46ID:sVexF7NP0 がんぱれ 0869デフォルトの名無しさん (ワッチョイ 7ab3-RYXs)2017/10/21(土) 11:33:55.75ID:fkuXV6f/0>>866 Visual Studioでもエラーになる まあ当然だわな 0870デフォルトの名無しさん (ワッチョイ 317f-0GSP)2017/10/21(土) 11:38:57.68ID:Q5TWqxQz0>>864 規格書の 6.5.3.2 Address and indirection operators に The operand of the unary & operator shall be either a function designator, the result of a [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier. こう書いてある 0871デフォルトの名無しさん (ワッチョイ 317f-0GSP)2017/10/21(土) 11:53:08.06ID:Q5TWqxQz0 K&Rの1stでも the address-of operator & cannot be applied to them. って書いてあるよ 0872デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)2017/10/21(土) 12:04:46.13ID:VJktQUPlp 俺にはレジスタ変数に割り当てた変数を関数のアドレス渡し引数にする意図が想像できない。 そんなにオーバーヘッド気になるなら、グローバル変数でレジスタ変数宣言してしまえって思う。 0873デフォルトの名無しさん (ワッチョイ 317f-0GSP)2017/10/21(土) 12:12:52.67ID:Q5TWqxQz0>>872 外部宣言にregisterは使えないぞ 0874デフォルトの名無しさん (ワッチョイ 19a5-FNU/)2017/10/21(土) 12:18:48.95ID:Hb3Ud/Wn0 オーバーヘッド気にしてたらコンテキストスイッチングとかどうすんだ? 0875デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)2017/10/21(土) 12:43:51.25ID:VJktQUPlp じゃあそんなクリティカルな問題無い様に、関数化する事自体を諦めた方がいいのでは? 0876デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)2017/10/21(土) 12:46:37.26ID:VJktQUPlp ヘッダーファイルにインライン宣言した関数を記述してしまうって解決方法もあるよな? 0877デフォルトの名無しさん (ワッチョイ 7ab3-RYXs)2017/10/21(土) 12:55:25.34ID:fkuXV6f/0>>873 さすがにネタだろ 0878デフォルトの名無しさん (ワッチョイ 7ad2-9nkm)2017/10/21(土) 18:44:07.64ID:KlHNvq3I0>>868 ありがとう
…実は逆に覚えててね。 レジスタに割り当てた変数の変数のアドレスが欲しいってのは矛盾してるから、 C++は厳格にチェックするかと。 0885名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a127-1OZr)2017/10/22(日) 07:11:33.28ID:dj2Vz85u0>>884 俺もそう思う registerはprvalueであるべき 0886名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ fa12-bcII)2017/10/22(日) 11:32:38.17ID:r2h/pPG10 レジスタってメモリ番地をもってるのか? 持ってない番外地なんじゃねえの? 0887名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ daf9-3CFD)2017/10/22(日) 11:38:07.26ID:rLWliBun0>>886 そうだよ。そこは誰も疑問に思ってない。 0888名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 7a87-DwBb)2017/10/22(日) 12:31:48.51ID:NaoIEEjs0 世の中には、レジスタがメモリーの先頭と同じ位置にマッピングされてるCPUだってあるけどな。 0889名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 3a23-0GSP)2017/10/22(日) 13:39:13.59ID:f5TzHp7R0 質問です。ポインタ変数を用いてキーボードから入力された5つの整数を配列xに保存し、その要素の列挙と合計値を求めるプログラムを作ったのですが、 #include <stdio.h> #include <stdlib.h>
int main (void){ int *p,x[4],sum=0,i,j; p=&x[0]; for(i=0;i<=4;i++){ printf("%dつ目の整数を入力してください ",i+1); scanf("%d",p); sum=sum+*p; } for(j=0;j<=4;j++){ printf("%d ",*(p+j));} /*配列の要素を列挙*/ printf("\n和=%d",sum); /*配列の要素の和*/ return 0;} で、結果が 1つ目の整数を入力してください 1 2つ目の整数を入力してください 2 3つ目の整数を入力してください 3 4つ目の整数を入力してください 4 5つ目の整数を入力してください 5 5 4200864 6422368 4200955 6422288 和=15 となり、要素の列挙がうまくいかないので対策を教えていただきたいです。 0890名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 7ad2-eNpY)2017/10/22(日) 13:49:53.88ID:rI45lLhS0 そりゃ最初に p に代入した同じ入れ物に入力値を保存してるからね。 ++p とかしてみたら? 0891名無しさん@そうだ選挙に行こう! Go to vote! (ササクッテロラ Sp85-DwBb)2017/10/22(日) 13:55:57.90ID:pqhboyRRp 素直に配列使え。 0892名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a593-+4Iz)2017/10/22(日) 14:15:34.40ID:m20yJ7cw0 scanf() での値の格納先 (== sumに加える値の参照先) である p を 初期化時の &x[0] のまま進めてないから入力した値が上書きされるんだよ。 もちろん x[1], x[2], ... には値が入らない。
質問の趣旨と関係ない部分を指摘して混乱させるつもりはないんだけど、 配列 x[] の要素数が足りないのがオジさん気になるなぁ。 0893名無しさん@そうだ選挙に行こう! Go to vote! (アウアウウー Sa89-PVu7)2017/10/22(日) 15:12:18.96ID:2+N8xzsVa>>889 既に>>890-892が指摘済みだけど
#include <stdio.h> #include <stdlib.h>
int main (void){ int *p,x[5],sum=0,i,j; /* x[5] */ p = x; for(i = 0;i <= 4; i++, p++){ printf("%dつ目の整数を入力してください ",i+1); scanf("%d", p); sum += *p; } p = x; /* ポインタの参照位置を配列先頭へ */ for(j = 0; j <= 4; j++){ printf("x[%d]=%d, ", j, *(p+j) ); }/*配列の要素を列挙*/ printf("\n和=%d\n ",sum); /*配列の要素の和*/ return 0; }