#6
by かずま » 8年前
drone さんが書きました:自分は長い間、ずーと 変数short SA[...] へのポインターと short Sへのポインターを
同じ定義[short* sp]にして利用してきたが、特にトラブル等が起きていないようです。
本質的な事はなんなんでしょうか。
単純変数を指す場合も、配列を操作する場合も short *sp で十分です。
short (*sap)[] が必要なのは、二次元配列を操作する場合です。
次の例は、ポインタを使って値を設定し、配列の値を表示するものです。
コード:
#include<stdio.h>
int main(void)
{
short s = 0;
short *sp;
sp = &s;
*sp = 1;
printf(" s = %d\n\n", s);
short sa[4];
sp = sa; // sp = &sa[0]; と同じ
for (int i = 0; i < 4; i++) sp[i] = 10 + i;
for (int i = 0; i < 4; i++) printf(" sa[%d] = %d", i, sa[i]);
printf("\n\n");
short (*sap)[4];
sap = &sa;
for (int i = 0; i < 4; i++) (*sap)[i] = 100 + i; // うれしくない
for (int i = 0; i < 4; i++) printf(" sa[%d] = %d", i, sa[i]);
printf("\n\n");
short saa[3][4];
sap = saa;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
sap[i][j] = 100 + i*10 + j;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
printf(" saa[%d][%d] = %d", i, j, saa[i][j]);
printf("\n");
}
}
実行結果
コード:
s = 1
sa[0] = 10 sa[1] = 11 sa[2] = 12 sa[3] = 13
sa[0] = 100 sa[1] = 101 sa[2] = 102 sa[3] = 103
saa[0][0] = 100 saa[0][1] = 101 saa[0][2] = 102 saa[0][3] = 103
saa[1][0] = 110 saa[1][1] = 111 saa[1][2] = 112 saa[1][3] = 113
saa[2][0] = 120 saa[2][1] = 121 saa[2][2] = 122 saa[2][3] = 123
[quote="drone" id=3,19308,146102]自分は長い間、ずーと 変数short SA[...] へのポインターと short Sへのポインターを
同じ定義[short* sp]にして利用してきたが、特にトラブル等が起きていないようです。
本質的な事はなんなんでしょうか。[/quote]
単純変数を指す場合も、配列を操作する場合も short *sp で十分です。
short (*sap)[] が必要なのは、二次元配列を操作する場合です。
次の例は、ポインタを使って値を設定し、配列の値を表示するものです。
[code=c]
#include<stdio.h>
int main(void)
{
short s = 0;
short *sp;
sp = &s;
*sp = 1;
printf(" s = %d\n\n", s);
short sa[4];
sp = sa; // sp = &sa[0]; と同じ
for (int i = 0; i < 4; i++) sp[i] = 10 + i;
for (int i = 0; i < 4; i++) printf(" sa[%d] = %d", i, sa[i]);
printf("\n\n");
short (*sap)[4];
sap = &sa;
for (int i = 0; i < 4; i++) (*sap)[i] = 100 + i; // うれしくない
for (int i = 0; i < 4; i++) printf(" sa[%d] = %d", i, sa[i]);
printf("\n\n");
short saa[3][4];
sap = saa;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
sap[i][j] = 100 + i*10 + j;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
printf(" saa[%d][%d] = %d", i, j, saa[i][j]);
printf("\n");
}
}
[/code]
実行結果
[code=text]
s = 1
sa[0] = 10 sa[1] = 11 sa[2] = 12 sa[3] = 13
sa[0] = 100 sa[1] = 101 sa[2] = 102 sa[3] = 103
saa[0][0] = 100 saa[0][1] = 101 saa[0][2] = 102 saa[0][3] = 103
saa[1][0] = 110 saa[1][1] = 111 saa[1][2] = 112 saa[1][3] = 113
saa[2][0] = 120 saa[2][1] = 121 saa[2][2] = 122 saa[2][3] = 123
[/code]