您的位置  > 互联网

C语言:首元素地址,一级指针指针

int a[]={1,3,5}

a:数组第一行第一个元素的地址,一级指针

&a:整个数组首地址,二级指针

a+1:跳转4个字节

&a+1:跳转12字节

(a):整个数组的长度为12字节。

(a[0]):取数组第一个元素,4字节

(&a):传递的是整个一维数组的地址(第一行地址),4字节

&a:首行地址

*&a -> a:第一行第一个元素的地址

----------------------------------

数组指针变量

整数a[10];

一个方法

整数[10];

*p;

p=&a //p指向a数组,指向一维数组的指针

(*p)[i] //指针操作模式

//p=&a

//*p->*(&a)->a

//(*p)[i]->a[i]

两种方式:直接定义数组指针变量

整数(*p)[10];

p=&a;

三种方式,先定义数组指针类型,然后根据类型定义指针变量

int (*Q)[10];

Q=p;

p=&a;

-------------------------------------------------- -------------------

多维数组

内存中不存在多维数组,都是线性存储的。

int a[3][5]={0};

int *b=(int *)a;

整数i=0

为(i = 0; i {

(“%d”,b[i]);

int a[3][5]={0};

a:二维数组第一个元素的地址,代表第一行的地址,相当于一维数组的整个数组地址,相当于上面的一维&a

*a:第一行第一个元素的地址,相当于一维数组的第一个元素的地址,相当于一维a

a+i -> &a[i]: 第 i 行的地址

*(a+i)->*&a[i]->a[i]:第i行第一个元素的地址

*(a+i)+j->a[i]+j->&a[i][j]:i行j列元素的地址

*(*(a+i)+j)->a[i][j]:第i行j列元素的值

int a[3][5]={0};

(a):二维数组整个数组长度:4*3*15=60字节

(a[0]):a[0]是第0行第一个元素的地址,相当于测量第0行一维数组的长度:4+5=20字节

(a[0][0]):a[0][0]为第0行第0列的元素长度:4字节

多维数组的名字实际上是一个数组指针变量

int a[3][5]={0};

int (*p)[5];

p=&a是整个二维数组的首地址。 不能直接给p,会报警告。

p=a //a是第0个一维数组的整个数组的地址,不需要加&

二维数组作为形式参数的三种形式

int a[3][5]={0};

某种

void (int a[3][5]);

两种

void (int a[][5]);

三种

无效(int(*a)[5]);

-------------------------------------------------- ----------------

指针数组

char *str[]={"1111",""};//先是数组,然后是指针,每个元素都是指针

指针数组作为形式参数

无效funa(char *str[]);

无效 funb(char **str);