配列とポインタの完全制覇ポインタの裏話ポインタの概念は、
*の混乱
*
int* i; のint* はintのポインタと読む。 intのポインタi*i は,iの指す値と読む。ワイルドカードだと思って、読み方で区別する。
int* i;
int*
*i
p[i] *(p+i)
上のふたつの式は、全く同等である。ポインタPからi番目の値を指してるに過ぎない。
ポインタpに加算してるiはpの指すオブジェクトのサイズ分のインクリメントである。
void func(int *a){ } と void func(int a[]){}
void func(int *a){ }
void func(int a[]){}
void func(char *s){ } void func(char s[]){ }
#include <stdio.h>int main(){ int numa[5] = {24,35,38,60,101}; int i = 0; for(i=0;i<5;i++){ printf("numa[%d] = %d\t",i,numa[i]); //配列の中身を表示 printf("address of numa[%d] = %d\n",i,numa+i); //配列の最初からアドレスを表示 } return 0; }
#include <stdio.h>
int main()
{
int numa[5] = {24,35,38,60,101};
int i = 0;
for(i=0;i<5;i++){
printf("numa[%d] = %d\t",i,numa[i]); //配列の中身を表示
printf("address of numa[%d] = %d\n",i,numa+i); //配列の最初からアドレスを表示
}
return 0;
numa[0] = 24 address of numa[0] = 2686712
numa[1] = 35 address of numa[1] = 2686716
numa[2] = 38 address of numa[2] = 2686720
numa[3] = 60 address of numa[3] = 2686724
numa[4] = 101 address of numa[4] = 2686728
numa[0] = 24.000000 address of numa[0] = 2686688
numa[1] = 35.000000 address of numa[1] = 2686696
numa[2] = 38.000000 address of numa[2] = 2686704
numa[3] = 60.000000 address of numa[3] = 2686712
numa[4] = 101.000000 address of numa[4] = 2686720
char numa[] = "confortable";
printf("numa[%d] = %c\t",i,numa[i]);
printf("address of numa[%d] = %d\n",i,numa+i);
numa[0] = c address of numa[0] = 2686720
numa[1] = o address of numa[1] = 2686721
numa[2] = n address of numa[2] = 2686722
numa[3] = f address of numa[3] = 2686723
numa[4] = o address of numa[4] = 2686724