C言語のポインタ、難しいです。
ポインタで文字列を扱うと、
char name[10] = "Ichiro"
として、余分なメモリを消費してしまうので、
char name[] = "Ichiro"
char *name = "Ichiro"
とすると、余分なメモリを消費せずに済む?
か確かめるために、下記のコードを書いてみました。
①下記の*nameのサイズ?("Ichiro", "Jiro", "Saburo" それぞれの文字列を格納するのに必要なバイト数?)
が知りたいのですが、どのように修正したらわかりますか?(EOS含め、7,5,7になると思ってます)
②また、sizeofって、色々できるみたいで、
size(配列) / size(type)とかしないとダメで、下記のような使い方はよくないんでしょうか。
③C言語に限らず、参考書がなかなか読み進められなくて悩んでます。
疑問に思ったことを掘り下げるために、色々とprintして確かめようとすると、
更なる疑問がでてきて、最終的に混乱し、参考書が進まなくなってしまうのですが、
一旦分かった気になったら、先に進んだ方がいいのでしょうか。
(お悩み相談みたいになってしまい、すみません)
よろしくお願いします。
C
1#include<stdio.h> 2 3int main() 4{ 5 char name[3][10] = {"Ichiro", "Jiro", "Saburo"}; // 初期化時に多めにメモリを確保する必要がある 6 int i; 7 for(i=0; i<3; i++){ 8 printf("私の名前は%sです。\n", name[i]); 9 printf("sizeof(name[%d])は%dです。\n", i, sizeof(name[i])); 10 printf("\n"); 11 } 12 return 0; 13} 14
C
1#include<stdio.h> 2 3int main() 4{ 5 char *name[3] = {"Ichiro", "Jiro", "Saburo"}; // 初期化時に多めにメモリを確保する必要がない? 6 int i; 7 for(i=0; i<3; i++){ 8 printf("私の名前は%sです。\n", *(name+i)); 9 // *(name+i) &name[i] のアドレスで文字列を格納するのに必要な配列のサイズが知りたい。 10 printf("sizeof(*(name+%d))は%dです。\n", i, sizeof(*(name+i))); 11 printf("\n"); 12 } 13 return 0; 14} 15
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/06 08:04
2018/09/06 22:54
2018/09/06 23:23 編集