指针与二维数组

来源:互联网 发布:淘宝怎么改默认地址 编辑:程序博客网 时间:2024/05/22 09:11

我们都知道,当定义一个一维数组时候,一维数组的数组名相当于指向元素的指针变量,唯一的区别就是数组名不可重新赋值,而指针变量则可以。并且此地址即为数组首个元素的地址:

例子:

int main(int argc, const char * argv[]){int chars[3] ={7,12,9};int *p=chars;int i;for(i=0;i<3;i++){    printf("%p\n",p+i);} /*0092F73C0092F7400092F744*/}


把上例子中的printf("%p\n",p+i); 更换成 printf("%d\n",p[i]); 打印结果:7,12,9跟数组下标访问元素很像

 

二维数组可以看作是元素是一维数组的一维数组,参考一维数组跟指针的关系,很容易得出二维数组名相当于是指向一维数组的指针变量,而二维数组的元素一维数组又是指向其内部元素的指针变量,故二维数组可以看做是二级指针变量。

二维数组跟指针怎么赋值那

int i,j;int chars[3][5] = {1,2,3,4,5,6};int (*p)[5] = chars;//int *p = chars; //错误 chars是相当于指向指向一维数组的指针,p是指向int类型的指针,故不能赋值for(i=0;i<3;i++){for(j=0;j<5;j++){printf("%p\n",p[i]+j); //遍历元素的地址 p[i]二维数组中各个一维数组的首个元素的地址 加+j就是一维数组中下一个元素地址printf("%p\n",*p+i*3+j); //遍历元素的地址 *p是二维数组首个元素的地址,即首个一维数组的地址,即一维数组的首个元素的地址+j,同上道理,+i*3是因为每个一维数组3个元素,换一行首个元素地址*p就+3的行数倍printf("%p\n",&p[i][j]); //类似数组操作   这三个打印的完全一样就是遍历每个元素的地址}}


 

0 0