C语言 数组和指针
const:
关于指针和const需要注意一些规则。首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的。
然而,只能把非const数据的地址赋给普通指针。(即const的值不能赋给普通指针);
指针和多维数组:
zippo == &zippo[0];
zippo+2 == &zippo[2];
*(zippo+2) == &zippo[2][0];
*(zippo+2) + 1 == &zippo[2][1];
*(*(zippo+2) + 1) == zippo[2][1];
指向多维数组的指针:
Int (* pz)[2]; >> pz指向一个内含两个int类型的数组;
(如: zippo[4][2];)
Int * pax[2]; >> pax 是一个内含两个指针元素的数组 , 每个元素都指向int的指针;
(差不多和数组的意思一样,就是声明了两个指针,一个是pax[0],另一个是pax[1])
(如pax [0] = zippo; pax[1] = zippp; >> *pax[0] == *pax[1];)
数组变量是const的指针 , 所以不能被赋值 :
int a[] <==> int * const a =….
数组变量本身表达地址 , 所以 :
int a[10]; int * p = a; // 无需用 & 取地址
但是数组的单元表达是变量 , 需要用 & 取地址
a == &a[0]
[ ] 运算符可以对数组做 , 也可以对指针做 :
p[0] <==> a[0];
* 运算符可以对指针做 , 也可以对数组做 :
*a = 25;