- 締切済み
char *(*)[];について
#include <iostream> using namespace std; main(){ char *(*pp)[2]; printf("%lu", sizeof(char*)); printf(" pp%lu", pp); printf(", ++pp%lu", ++pp); } これを実行して 4 pp6660000, ++pp??????? のように表示されたときに、???????の部分が何になるか考えました。 ppはchar[2]を指すポインタのポインタだから、ppをインクリメントすれば、「char[2]を指すポインタ」の大きさだけ大きくなるはずだから、「char[2]を指すポインタ」の大きさである4バイト大きくなるはずだから 4 pp6660000, ++pp6660004 になると思いました。 どこを勘違いしていてどう考え直せばよいか教えて下さい。
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- char *(*)[3];について
#include <iostream.h> main(){ char *(*pp)[3]; printf("%lu", sizeof(char*)); printf(" pp%lu", pp); printf(", ++pp%lu", ++pp); } これを実行して 4 pp6660000, ++pp??????? のように表示されたときに、???????の部分が何になるか考えました。 ppはchar[3]を指すポインタのポインタだから、ppをインクリメントすれば、「char[3]を指すポインタ」の大きさだけ大きくなるはずだから、「char[3]を指すポインタ」の大きさである4バイト大きくなるはずだから 4 pp6660000, ++pp6660004 になると思いました。 どこを勘違いしていてどう考え直せばよいか教えて下さい。
- ベストアンサー
- C・C++・C#
- アドレスをintに代入する方法
適当なアドレスをprintfで表示し、その値をintに代入するのが目的です。 #include <iostream> using namespace std; main(){ char buf[20]; char **pp; char *p = "\0"; int i; pp = &p; printf("%lu\n", pp); sprintf(buf, "%lu\n", pp); i = atoi(buf); printf("%lu\n", i); } とりあえずできていますが、 pp = &p;以降の処理で、bufを使ったり非推奨?のatoi()を使っています。 pp = &p;以降の処理でもっとよい方法はないでしょうか?
- 締切済み
- C・C++・C#
- アドレスをint変数に代入する方法
printfで表示したアドレス値を、int変数に代入するのが目的です。 #include <iostream> using namespace std; main(){ char buf[20]; char *(*pp)[2]; char *p[2]; int i; pp = &p; printf("%lu\n", pp); // i = (int)(&pp); sprintf(buf, "%lu\n", pp);//// i = atoi(buf);//// printf("%lu\n", i); } とりあえずできていますが、 pp = &p;以降の処理で、bufを使ったり非推奨?のatoi()を使っています。 pp = &p;以降の処理でもっとよい方法はないでしょうか? また、このソースは不正なことをやっていないでしょうか? 必要な初期化をやってない、などということはありませんか?
- ベストアンサー
- C・C++・C#
- C++のnamespace stdについて
C++のnamespace stdについて教えて下さい。 coutを使用する場合"iostream"をインクルードし、using namespaceでstd名前空間を使用します。 printfを使用する場合"cstdio"をインクルードし、using namespaceでstd名前空間を使用します。 どちらのインクルードファイルにもnamespace stdという風に同じ名前の名前空間を 使用しているのでしょうか? もしもそうだとしたらcstdio,iostreamの両方をインクルードしている場合 名前空間が競合してしまうのではないでしょうか? namespaceはjavaでいうパッケージにあたる物だと思っていたので、 これでは意味がないのではないかと思いました。 それとも意図的に同じ名前空間を定義している意味があるのでしょうか? C++を使い始めたばかりで戸惑っています。どなたかお答え頂ければありがたいです。
- ベストアンサー
- C・C++・C#
- この文章正確ですか?
#include <string> #include <iostream> using namespace std; int main(){ string s1; s1 = "こんにちわ"; count << s1 << endl; } これをコンパイルしようとしてもできません。 どこが間違っているのでしょうか?
- ベストアンサー
- C・C++・C#
- char[]とchar*
#include<iostream.h> main() { char str1[] = "AB"; char *str2 = "ab"; *(str1+1) = 'C'; *(str2+1) = 'c'; printf("%s\n", str1); printf("%s\n", str2); } このソースの *(str2+1) = 'c'; の所はC++では間違った処理ですか? []かnewなどの変数なら書き換えてよいのは分かりますが、str2はこれでよいのか教えて下さい。
- ベストアンサー
- C・C++・C#
- char型+char型ってint型? if(char型==int型)?
C言語の「汎整数拡張(インテグラルプロモーション)」というものに関するものだと思います。 char型とchar型を加えた結果は、char型でしょうか。それともint型でしょうか。 (下のプログラムの printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */ という部分の結果は4なので、int型と考えるべきなのかな。) 私は、char型とint型の加算の結果はint型だと思っていましたが、 char型とchar型の加算の結果はやはりchar型だと思っていました。 (それが間違えているのでしょうか。) if(a[0]==i) /* char型とint型の比較(?) */ の部分では、左辺はchar型、右辺はint型ですが、このように型の違う変数を比較しても文法上構わないのでしょうか。 (私は、「比較は必ず型の同じもの同士でしかできない」と思っていました。) 左辺はchar型のように見えて、じつはint型ですか。 #include <stdio.h> int main(void) { char a[4]; int i=77; printf("sizeof(int)は%d\n", sizeof(int)); printf("sizeof(char)は%d\n", sizeof(char)); printf("sizeof('M')は%d\n", sizeof('M')); printf("sizeof(a[0])は%d\n", sizeof(a[0])); a[0]='M'; a[1]=7+6; a[2]=a[0]+a[1]; printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */ printf("sizeof(+a[0])=%d\n", sizeof(+a[0])); if(a[0]==i) /* char型とint型の比較(?) */ puts("a[0]==i"); else puts("a[0]!=i"); return(0); } ちなみにワーニングもエラーもなんにもでません。
- ベストアンサー
- C・C++・C#
- C++言語で文字列を出力するにはどうしたら良いですか。
C++言語で文字列を出力するにはどうしたら良いですか。 今、ポインタの勉強中ですが、ポインタの使い方がよく分からないです。 次のコードで ---------- one two three ---------- を出力したいのですが、nしか出力できません。 どうやらoneのnしか出力できません。 どのようなコードを書いたら解決できますでしょうか。 ------------------------------------------- #include<iostream> using namespace std; char name[3][10]={{"one"},{"two"},{"three"}}; char f(const char *name,int i){ return name[i]; } int main(){ cout << f(name[0],1) << endl; } -------------------------------------------
- ベストアンサー
- C・C++・C#
- プログラミング言語Cとプログラミング言語C++
プログラミング言語Cとプログラミング言語C++の違いって何ですか? あと、プログラミング言語C++についていくつか質問があります。 #include <iostream> using namespace std; void main(){ cout << "Hello world!" << endl; } このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか? using namespace stdって何ですか? あと、 cout <<"Hello world!"って何ですか?
- ベストアンサー
- C・C++・C#
お礼
理由を知りたかったです。 ぼくにはなぜそうなのか分かりませんでした。 ありがとうございました。