
C言語について勉強しています。
下記サイトに、このようなポインタを使ったプログラムが紹介されています。
C
1int main(void) 2{ 3 int n, data[100], *p; // ←*pがintで定義されている 4 printf("数を入力してください->"); 5 scanf("%d", &n); 6 p = data; 7 while (n >= 0) { 8 *p = n; 9 p++; 10 printf("数を入力してください->"); 11 scanf("%d", &n); 12 } 13 while (p > data) { 14 p--; 15 printf("%d\n", *p); 16 } 17}
この例では、*pがintで定義されていますが、
C
1int main(void) 2{ 3 int n, data[100]; 4 long *p; // ←*pをlongに変更 5 printf("数を入力してください->"); 6 scanf("%d", &n); 7 p = data; 8 while (n >= 0) { 9 *p = n; 10 p++; 11 printf("数を入力してください->"); 12 scanf("%d", &n); 13 } 14 while (p > data) { 15 p--; 16 printf("%d\n", *p); 17 } 18}
このようにlongにすると、コンパイルでワーニングは出るのですが、動作は全く同じです。
また、shortやcharにしてもやはり同じで、ワーニングは出ますが動作は*pをintにした時と全く同じです。
ポインタ配列はアドレスを格納する変数という事は知っていますが、アドレスが格納できる容量があれば変数の型はなんでもいいのでしょうか?
今度、組み込み系の仕事をする予定なので、このあたりの違いなどを細かく知りたいと考えいます。
有識者の方、どうぞよろしくお願い致しますm(_ _)m

回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/25 00:50