#7
by box » 1年前
こんなサンプルコードを動かしてみると、
arrayのアドレス値
array[0]のアドレス値
array[1]のアドレス値は
main()とf()とで不変(∵コピー値が渡っている)であり、
また、関数に配列を渡すときはその先頭要素のアドレス値が渡っており、
array[0]とarray[1]が指している先の内容(アドレス値そのものじゃないですよ)が
1増えたり2増えたりして異なっていることに気づくかもしれません。
コード:
#include <stdio.h>
void f(int array[]);
int main(void)
{
int array[2] = { 123, 456 };
printf("%d %d\n", array[0], array[1]);
printf("*** main() before calling f() ***\n");
printf("value of array is %p\n", array);
printf("value of &array[0] is %p\n", &array[0]);
printf("value of &array[1] is %p\n", &array[1]);
f(array);
printf("*** main() after calling f() ***\n");
printf("value of array is %p\n", array);
printf("value of &array[0] is %p\n", &array[0]);
printf("value of &array[1] is %p\n", &array[1]);
printf("%d %d\n", array[0], array[1]);
return 0;
}
void f(int array[])
{
printf("+++ f() called by main() +++\n");
printf("value of array is %p\n", array);
printf("value of &array[0] is %p\n", &array[0]);
printf("value of &array[1] is %p\n", &array[1]);
array[0]++;
array[1] += 2;
}
こんなサンプルコードを動かしてみると、
arrayのアドレス値
array[0]のアドレス値
array[1]のアドレス値は
main()とf()とで不変(∵コピー値が渡っている)であり、
また、関数に配列を渡すときはその先頭要素のアドレス値が渡っており、
array[0]とarray[1]が指している先の内容(アドレス値そのものじゃないですよ)が
1増えたり2増えたりして異なっていることに気づくかもしれません。
[code]
#include <stdio.h>
void f(int array[]);
int main(void)
{
int array[2] = { 123, 456 };
printf("%d %d\n", array[0], array[1]);
printf("*** main() before calling f() ***\n");
printf("value of array is %p\n", array);
printf("value of &array[0] is %p\n", &array[0]);
printf("value of &array[1] is %p\n", &array[1]);
f(array);
printf("*** main() after calling f() ***\n");
printf("value of array is %p\n", array);
printf("value of &array[0] is %p\n", &array[0]);
printf("value of &array[1] is %p\n", &array[1]);
printf("%d %d\n", array[0], array[1]);
return 0;
}
void f(int array[])
{
printf("+++ f() called by main() +++\n");
printf("value of array is %p\n", array);
printf("value of &array[0] is %p\n", &array[0]);
printf("value of &array[1] is %p\n", &array[1]);
array[0]++;
array[1] += 2;
}
[/code]