1:
const char ** and char **
const char ** ==> const char *
char ** ==> char *
2:
array
int a[10]
a as a right value
b = a == > char ((char *)a) length = 1
b = &a ==> length = sizeof(int) * 10
b = &a[0] ==> int a[0]
xxtype a[10];
a ==> address value ==> (typeof a[0])* a[0]
int a[10];
a is an address value, not an int value;
a is only a right value, not a left value , pointer (which contains address value of a) doesn't exist. without memory space to contain the address of a.
type of a is a pointer which point to type of a[0]
length of a is a[0] -- a[length] (NOTE: length is 0, 1, 2, .. length, NOT (length - 1), the total number elements which can accessed by a is (length + 1)), a[-1] , or a[length + 1] is illegal.
3:
pointer and array
C Language type
type = first address + space length
4:
array as pointer
a[10]
p = a
p-- -- xx
p+1
p+2
..
p+9 -- OK
p+10 -- OK
p+11 -- xx
5:
二维数组和二级指针是两码事。
无论多少维度的数组,都是一级指针,参数用fun(int *array)即可接收。
二级指针(指向指针的指针)是这样用的:
1
2
3
|
int
a[5][5];
void
fun(
int
**array,
int
n);
fun(&a,n);
//将指针的地址传送过去
|