- ベストアンサー
ポインタへの代入
int main() {int *i =0xffffffff; printf("&p...%p",&p); return 0;} としてiにffffffffのアドレスを代入しても別のアドレスが表示されます。なぜでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- bluecampus
- ベストアンサー率66% (138/209)
関連するQ&A
- ポインタいついて教えてください
ポインタがわかりません。 教えてください。 下の二つは、共に「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#
- ポインタについて
ポインタについてですが、下記のプログラムで、 data = array; で、array[0] のアドレスを代入してますよね? for文で、all+= data[i];では、 どんな計算がおこなわれていますか? dataにarray[0]のアドレスが代入されているので、アドレスの足し算が行われているんですか?(よく解らないのですが。) 教えてください。 #include <stdio.h> int main(void) { int *data; int i, all = 0, array[10] =15,78,98,15,98,85,17,35,42,15; data = array; for (i = 0;i < 10;i++) { all+= data[i]; } printf("%d\n",all/ 10); return 0; }
- ベストアンサー
- C・C++・C#
- ポインタについて
今初めてポインタというものを勉強しております。 よろしくお願いします。 ◎1---------------------------------- #include<stdio.h> int main(void) { int mydt=1234; int *pt; pt=&mydt; printf("*pt=%d\n",*pt); printf("&mydt=%p\n",&mydt); return 0; } --------------------------------------- ◎1のようにmydtのアドレスをポインタptに代入すれば、このプログラムは正常に動きました。 ◎2----------------------------------- #include<stdio.h> int main(void) { int mydt=1234; int *pt=&mydt; printf("*pt=%d\n",*pt); printf("&mydt=%p\n",&mydt); return 0; } ---------------------------------------- ◎2で「int *pt=&mydt;」があまりどういう意味かはわかりませんが、これも正常に動きました。 ◎3------------------------------------ #include<stdio.h> int main(void) { int mydt=1234; int *pt; *pt=&mydt printf("*pt=%d\n",*pt); printf("&mydt=%p\n",&mydt); return 0; } -------------------------------------- ◎3のように◎2と違って「*pt=&mydt」の代入を後から行うと、「'=' : 'int *__w64 ' から 'int' に変換できません。」といったようなエラーが起きてしまいます。 ◎1と◎2の違い、後何故◎3はダメなのかがわかりません。 教えていただけると嬉しいです。 後補足として、配列とポインタについてですが、 ◎4------------------------------ char ss[10]="ABCDE"; char *ssp=ss; --------------------------------- ◎5---------------------------- char ss[10]="ABCDE"; char *ssp; ssp=ss; -------------------------------- ◎4と◎5も同じような事だとは思いますが違いを教えていただけると嬉しいです。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語のポインタについて教えてください。
C言語のポインタについて教えてください。 ・pointer1.c int main(){ int a; int *p; p = &a; a = 123; printf("%d", *p); return 0; } ・pointer2.c int main(){ int a[100]; int *p; p = &a[0]; int i; for(i = 0; i < 100; i++) a[i] = i; for(i = 0; i < 100; i++) printf("%d", *p++); return 0; } と二つのソースコードがあるとき、pointer2.cの「p = &a[0]」をpointer1.cのように「p = &a」と書けないのはなぜですか? また、「&a」は動かすことのできなく、「aを指し示す*p」は動かすことができる変数のようなもの、という認識に誤りはないでしょうか? 宜しくお願いします。
- 締切済み
- C・C++・C#
- ポインタと { } の関係とは
戻り値が配列(ポインタ)で返す関数を二つ作りif文で選択できるようにしたら 各要素の値がうまく表示されません。 最初に配列の各要素に自分で値を代入するか、ランダムに値を代入させるか決めて、代入させた配列を最後に表示させたいわけです。 #include <stdio.h> int RegistData(int *); int RandomData(int *, int); void main(){ int mous[6]; int select; printf("自分で表示入力するときは1を、コンピュータに任せるときは0を入力してください。"); scanf(" %d", &select); if(select == 0){ *mous = RandomData(mous); }else if(select == 1){ *mous = RegistData(mous); } for( i = 0 ; i < 6 ; i++) printf("%d ", mous[i]); } printf("\n"); } RandomData(int *mous) { //rand()関数でランダムに各要素に値を代入する処理をします。 return *mous; } RegistData(int *mous) { //自分で要素に値を代入する処理をします。 return *mous; } ちなみに、あらかじめ要素に値を入れておくと正常にうごきます。 int mous[6] = { 10, 15, 12, 23, 33, 42};//動作確認用表示
- ベストアンサー
- C・C++・C#
- 関数とポインタについて
#include <stdio.h> void test(int *p); int main() { int i; test(&i); printf("%d",i); return 0; } void test( int *p) { static int k; k = 10; p = &k; } このようなプログラムを作って、void test()のkの値をmain関数で受け取りたいのですが、どのようにすればよいのかわかりません。 どなたか教えていただけませんか?
- ベストアンサー
- C・C++・C#
- ポインタについて
#include <stdio.h> int main( void ) { intx; printf("x = %p\n", &x); printf("x = %d\n", &x); printf("x = %p\n", x); printf("x = %d\n", x); return 0; } 一応僕が使っている参考書によると printf("x = %p\n", &x); はxのアドレスを表示するようですが 他の三つは何を表示するのでしょうか? よければ詳しい説明をつけてくれるとうれしいです (~が~だから~と表示される)みたいなかんじで お願いします
- ベストアンサー
- C・C++・C#
- ポインタに ~0を入れること
見かけたCのプログラムで、 ポインタに~0を代入するものを見ました。 そのプログラムをそのまま載せるのはわかりにくいので、 代わりに以下のプログラムを作って実行しました。 #include <stdio.h> int main(void) { char *pa[3]; int i; pa[0]=0; pa[1]=~0; pa[2]="Hello"; printf("sizeof(char*)=%d\n", sizeof(char*)); for(i=0; i<=2; i++) { if(pa[i]==NULL) printf("pa[%d] はNULLです。\n", i); if(pa[i]==(char*)0xFFFFFFFF) printf("pa[%d]は全ビット1です。\n", i); if(pa[i]==~0) printf("pa[%d]は~0です。\n", i); } return 0; } 結果 sizeof(char*)=4 pa[0] はNULLです。 pa[1]は全ビット1です。 pa[1]は~0です。 このプログラムはコンパイル時にエラーも警告も出ず、 動作も意図したとおりです。 pa[1]に入っている ~0 は、int型の定数なのでしょうか。 それならば、 pa[1]=~0; という代入や if(pa[i]==~0) という比較は 左辺はchar*型で右辺はconst int型であって型が異なりますが、 問題ないのでしょうか。 ~0は0の否定なので、全ビットは1なのでしょうけど、 int型(の定数)だと思います。 ~0というのは何か特別な値なのでしょうか。 ポインタに~0を入れるというのは、意味があるのでしょうか。 (例えば、「ポインタに0を入れるということは、ヌルポインタであって、ポインタとして無効なんですよ」のようなこと。)
- ベストアンサー
- C・C++・C#
お礼
回答ありがとうございます。短いコードですが、僕の疑問の本質をとらえていますね。納得しました。