- ベストアンサー
C言語ポインタのプログラムの実行結果が予想と異なる
- C言語のポインタを使ったプログラムの実行結果が予想と異なる。
- プログラムの実行結果が「9 6 5」と表示されるが、予想では「6 9 5」となるはず。
- プログラムの処理の流れを順番に解説してほしい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- C言語のポインタ
あまり意識せずにポインタを使っているせいか,次のプログラムではまってしまいました. #include<stdio.h> #include<stdlib.h> int main(void) { int *p, q; p = (int *)malloc(sizeof(int)); q = (int *)malloc(sizeof(int)); *p = 2; printf("%d\n", *p); return 0; } コンパイルエラーで実行ファイルが出力されません. このプログラムで変数qはなぜポインタじゃないのでしょうか? 次にtypedefでptr_intという型を定義したプログラムは, 上のようなエラーが出力されず,期待とおりの結果になりました. #include<stdio.h> #include<stdlib.h> typedef int* ptr_int; int main(void) { ptr_int p, q; p = (int *)malloc(sizeof(int)); q = (int *)malloc(sizeof(int)); *p = 2; *q = 3; printf("%d\n", *p); printf("%d\n", *q); return 0; } typedefすることでなぜエラーを回避することができるのでしょうか? よろしくおねがいします.
- ベストアンサー
- C・C++・C#
- C言語のポインタについての質問です。
C言語のポインタについての質問です。 2つのプログラムを作り、片方で数値を入力し、 もう片方でその数値を読み取りたいと思っています。 数値入力のプログラムは次のようになっています。 #include<stdio.h> void main(void){ int A=1; int *p; p=&A; printf("%p\n",p); } この実行結果は「0012FF88」となりました。 次にこの「0012FF88」というアドレスを使って「1」を読み取る 別のプログラムを作りたいと思っています。 #include<stdio.h> void main(void) { int add; int a; printf("アドレスは?\n"); scanf("%x",&add); //「0012FF88」と入力 a=*(int*)add; printf("%x---->%d",&add,a); } このようなプログラムを作ってコンパイルできたのですが、 実行してアドレスを打ち込むと「Win32の例外が発生しました」 となって実行できません。 何かよい方法やプログラムの問題などありましたら 教えて頂けませんか?
- ベストアンサー
- C・C++・C#
- ポインタいついて教えてください
ポインタがわかりません。 教えてください。 下の二つは、共に「100」を表記すると思いますが、 どこがどのように違うのですか。 また、f1()という関数をつくって、ここで scanfを使って、5つぐらい値を代入させて、 他の関数でこの値を使おうと思っています。 この場合下のどちらを使うのが、よろしいのでしょうか。 よろしくお願いします #include <stdio.h> int main(void) { int *p, q; q = 100; /* q に100を代入 */ p = &q; /* p にq のアドレスを割り当てる */ printf("%d", *p); return 0; } #include <stdio.h> int main(void) { int *p, q; p = &q; /* q のアドレスを得る */ *p = 100; /* ポインタを使ってq に値を代入する */ printf("%d", q); return 0; }
- ベストアンサー
- C・C++・C#
- C++ ポインタ初級
C++で、自作関数内でメインの数字をインクリメントします。 自作関数はVOIV型でやりたいんです。 #include <stdio.h> void plus( int * ); main( ){ int a = 1; int *&p = &a; plus( p ); printf( "%d" , *p ); } void plus( int *i ){ ( *i )++; } int型の変数を2つ宣言したけど、1つでやる方法はないですか? #include <stdio.h> void plus( int * ); main( ){ int a = 1; plus( &a ); // aのアドレスを渡して、 printf( "%d" , a ); } void plus( int *i ){ // アドレスの値を ( i )++; // インクリメントしたつもりだけど } 結果は1のままでした。
- ベストアンサー
- C・C++・C#
- c言語についてですが
#include <stdio.h> #include <stdlib.h> #include <time.h> #define D_ABC 50 #define S_NUMBER 5 int main( void ) { int abc[ D_ABC ]; int goukei; int homi; int sa[S_NUMBER]; int s; int m; int p; int k; s = 0; printf( "指定する数値を入力して下さい。\n"); do{ scanf( "%d", &sa[s++] ); } while(sa[s-1] > 0 ); --s; p = 0; printf( "指定する数字を入力して下さい。\n" ); do{ scanf( "%d", &abc[p++] ); } while( abc[p - 1] > 0 ); --p; srand( time(NULL)); for( m = 0; m < 5; m++ ) { do{ for( k = 0; k < 100; k++ ) { int o = rand() % p; int t = rand() % p; int buf; buf = abc[o]; abc[o] = abc[t]; abc[t] = buf; } goukei = 0; homi = 0; for( k = 0; k < 5; k++ ) { goukei += abc[k]; if( ( abc[k] % 2 ) == 0 ) ++homi; } } while( goukei < (50 - [sa] || goukei > (110 - [sa]) || homi < 2 || homi > 3 ); for( k = 0; k <4; k++ ) printf( "%d%d\t",sa[s], abc[k] ); printf( "\n" ); } return 0; } どこか おかしいですか? 始めたばかりなのでわかりません。
- 締切済み
- C・C++・C#
- C言語について
#include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?
- ベストアンサー
- C・C++・C#
- c言語についてですが
#include <stdio.h> #include <stdlib.h> #include <time.h> #define D_ABC 50 #define S_NUMBER 5 int main( void ) { int abc[ D_ABC ]; int goukei; int homi; int sa[S_NUMBER]; int s; int m; int p; int k; s = 0; printf( "指定する数値を入力して下さい。\n"); do{ scanf( "%d", &sa[s++] ); } while(sa[s-1] > 0 ); --s; p = 0; printf( "指定する数字を入力して下さい。\n" ); do{ scanf( "%d", &abc[p++] ); } while( abc[p - 1] > 0 ); --p; srand( time(NULL)); for( m = 0; m < 5; m++ ) { do{ for( k = 0; k < 100; k++ ) { int o = rand() % p; int t = rand() % p; int buf; buf = abc[o]; abc[o] = abc[t]; abc[t] = buf; } goukei = 0; homi = 0; for( k = 0; k < 5; k++ ) { goukei += abc[k]; if( ( abc[k] % 2 ) == 0 ) ++homi; } } while( goukei < (50 - [sa] || goukei > (110 - [sa]) || homi < 2 || homi > 3 ); for( k = 0; k <4; k++ ) printf( "%d%d\t",sa[s], abc[k] ); printf( "\n" ); } return 0; } このようなソースプログラムを書いてみたんですがうまくいきません。 最初の数値はS_NUMBER からの入力で後に通ずく数値はシャッフルした数値を入力したいとおもっていますがうまくいきません。どなたかお願いします。 〇 ●●●●(イメージです)
- 締切済み
- C・C++・C#
- C言語の初歩的な質問
質問1----------------------------------------- #include<stdio.h> int main() { int a; char b[10]; for(int i = 0;i < 2;i++){ scanf("%d",&a); printf("整数%d\n",a); } scanf("%s",b); printf("文字列%s\n",b); } /* この際に、例えばabと入力すると結果が 整数-858993460 整数-858993460 文字列ab となり整数入力を無視して進められるのはなぜでしょうか? */ 質問2----------------------------------------- #include<stdio.h> void func(int**); int main() { int *p; func(&p); printf("%d",*p); } void func(int **pp) { int n = 10; *pp = &n; } /* func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? */ ---------------------------------------------- C言語は一冊の本とネットの入門サイトをかじった程度の理解です。
- ベストアンサー
- C・C++・C#
- C言語 プログラミング
C言語、プログラミングの質問です。 構造体について、 プログラムを組んでみたのですが、上手く出力されません。実行時にはエラーはないのですが、出力時に上手くいきません。どなたかどこがおかしいかわかる方、教えていただけませんでしょうか? #include <stdio.h> struct user{ char *name; char *id; int books; }; int main (void) { struct user u; printf("氏名を入力して下さい。"); scanf("%s",u.name); printf("パスワードを入力してください。"); scanf("%s",u.id); printf("年齢を入力してください。"); scanf("%d",&u.age); printf("氏名 %s\n",u.name); printf("パスワード %s\n",u.id); printf("年齢 %d\n",u.age); return 0; } よろしくお願いします。
- ベストアンサー
- その他(インターネット・Webサービス)
- C言語のポインタの考え方について
ポインタについて理解ができていないのでお聞きしたいのですが 値を交換する関数のプログラミングでこの場合ポインタ で以下にしないといけないと思います。 #include<stdio.h> void swap(int *a int *b){ int c; c=*a; *a=*b; *b=c; } main(){ int x,y; x=123; y=456; swap(&x,&y); printf("x = %d, y = %d\n", x, y); } またポインタを使用せず以下のプログラムではなぜダメのでしょうか。 よろしくお願い致します。 #include<stdio.h> void swap(int a int b){ int c; c=a; a=b; b=c; } main(){ int x,y; x=123; y=456; swap(x,y); printf("x = %d, y = %d\n", x, y); }
- ベストアンサー
- C・C++・C#
お礼
回答ありがとうございました。 理解できましたm(__)m