跳转至

零维指针与一维数组

int a[4]={1,2,3,4};  
int *p;  
p=a;    //等效于p=&a[0]
for(int i=0; i<4; i++){  
    cout<<*(a+i)<<' ';        //等效于a[i]  
}
for(int i=0; i<4; i++){  
    cout<<a[i]<<' ';  
}

for(int i=0; i<4; i++){  
    cout<<*(p+i)<<' ';        //等效于p[i]  
}
for(int i=0; i<4; i++){  
    cout<<p[i]<<' ';  
}
for(int i=0; i<4; i++){  
    cout<<*(p++)<<' ';  
}

1
2
3
int a[4]={1,2,3,4};  
int *p;  
p=a;    //等效于p=&a[0]

int *定义了一个**零维**的指针*p(一次只能指向一个点),p=ap指向了数组a第一个元素的地址。其中,数组名a的作用是“数组a第一个元素的地址”,即&a[0]

1
2
3
4
5
6
for(int i=0; i<4; i++){  
    cout<<*(a+i)<<' ';        //等效于a[i]  
}
for(int i=0; i<4; i++){  
    cout<<a[i]<<' ';  
}
  • *(首地址a+偏移量i)可以访问一维数组的元素
  • 数组名a[偏移量i]或者说数组名a[下标i]也可以访问一维数组的元素
1
2
3
4
5
6
7
8
9
for(int i=0; i<4; i++){  
    cout<<*(p+i)<<' ';        //等效于p[i]  
}
for(int i=0; i<4; i++){  
    cout<<p[i]<<' ';  
}
for(int i=0; i<4; i++){  
    cout<<*(p++)<<' ';  
}

p这时已经存储了数组a的首地址(首元素的地址),所以 - *(首地址p+偏移量i)可以访问一维数组的元素:p+i或者逐渐的p++都行 - 等效数组名p[偏移量i]也可以访问一维数组的元素