C/C++之数组与指针关系-全解全息

来源:互联网 发布:hany是什么牌子 知乎 编辑:程序博客网 时间:2024/04/25 08:06
/************************************************************************//* 一维数组名是一个指针常量,其值是此数组的第一个元素的地址,即此数组的首地址所以,它可以直接赋值给指针变量,因为其数据类型都是地址类型。二维及多维(n)数组名不是像一维数组名那样的指针常量,是指向其(n-1)维数组的指针,因此,是不能像一维数组名那样赋值给指针变量的。多维数组在赋值时遵循的是最深维优先原则,即赋值最先付给右边维数最深的维。操作时遵循的是左优先原则,即在操作时先确定的是最左边的维,如定义数组int i[2][3][4][5][6];则i[1][2]表示的是最先把最左边的维给确定了的地址指针,即i[1][2][0][0][0]                                                              *//************************************************************************/#include <STDIO.H>int main(void){char i[2][8][8] = {"hello!"};//二维及以上的数组必须使用相应数量的大括号(都至少加一个大括号),其遵循的是最深优先原则,即当没有全部赋值时,其最先来赋值的是最深的维,即最右边的那一维,之后是次右边的,以此类推,没有赋值的,将被初始化为空。char * p;//p = i[0];        //错误,i[0]表示的是指向二维数组的指针p = i[0][0];  //正确,i[0][0]表示的是一维数组的地址//  p = i[0][0][0];  //错误,i[0][0][0]表示的是具体的元素//* p = i[0][0][0];  //错误,p未被初始化,里边存放的是垃圾值,* p指向了没有操作权限的未知区域printf("%c\n", p[1]);//p的值是i[0][0]的首地址,那么p[1]表示的是已确定了行列都是0的基础上,第三维的下表是1的元素,就是字母 e .printf("%c\n", *(i[0][0]+2));//i[0][0]+2 表示的是在已经确定是第0行第0列的基础上,再进行的操作的自然是第三维了,对地址加减运算的结果是个整数值,所以要加个取地址的逆运算符(*),最终输出是字母 l .printf("%s\n", i[0][0]);//此处给出的是最后一维一整维的地址指针,所以要输出 %s .return 0;}/************************************************************************//* 此程序在VC++6.0中的运行结果是:elhello!Press any key to continue                                                                     *//************************************************************************/

0 0
原创粉丝点击