一、一维数组与一级指针关系
一维数组与指针(难点)
char ch[6] = "hello";
数组每一个元素地址:&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],
ch :数组首元素地址
&ch :整个数组的首地址
数组中每个元素地址的表示方法:
ch == &a[0] ch+1==&a[1] ch+2==&a[2] ch+3==&a[3] ch+4==&a[4] ch+5==&a[5]
同理:
*ch == a[0] *(ch+1) ==a[1] *(ch+2) == a[2] *(ch+3) == a[3] *(ch+4) == a[4] *(ch+5) == a[4]
例子:
char ch[6]={"hello"};
假设:ch的地址为:0x234;
那么 ch = 0x234
*(ch+3)='l’
ch[2]='l'
& (ch[1]) =0x235
* ( &ch[5])='\0'
&ch+1=0x23A= 0x234+6
总结:
(1)在实际开发过程中,数组名可以直接代替指针的方式,通过数组名操作数组
(2)数组名+n,实际的地址值为:数组名+n*sizeof(指向数据指针类型)
(3)数组名+1与&数组名+1是不同的结果。
(4)在数组中可以有指针运算,如ch+2, ch-5;如果数组名做为参数传递给函数,在函数内可通过指针++,或者指针-- 移动,可以指向不同的元素
(5)两个指针相减(数组中,指针相减才有意义),结果为两个指针之间的元素个数
二、二维数组与的指针关系
char ch[3][5] = {"test","hi","good"};
ch :大数组首地址
&ch :整块数组的首地址
假设:ch = 0x22;
ch+1 &ch+1 &ch[0][0] *(ch+1) == *((ch+1)+0)
0x27 0x31 0x22 'h'
ch+i:存储的某块大数组地址
*(ch+i):取某块大数组基地址
(*(ch+i)+j):某块大数组小数组元素的地址
*((*(ch+i)+j)):某块大数组小数组中的元素的值