学习笔记(21):C语言 从小白到大神: 入门篇-数组的指针和指向数组的指针变量-3...

立即学习:https://edu.csdn.net/course/play/8088/176291?utm_source=blogtoedu

1. 指向多维数组的指针和指针变量探究

int a[3][4];

(1)a:是二维数组名,也是整个二维数组的首地址

(2)a+1,a+2:分别代表第一行首地址和第二行首地址

(3)a[0],a[1],a[2]是一维数组名,c语言规定了数组名代表数组的首地址:所以就有如下:

a[0] == &a[0][0]是第0行首地址;

a[1] == &a[1][0]是第一行首地址;

a[2] == &a[2][0]是第二行首地址

(4)第0行第一列元素地址:

可以用&a[0][1],是用a[0] + 1表示

(5)二维数组总结:

a[0]  等价于  *a; a和*a地址都是1000;

a[0]+1 等价于 *a + 1 等价于&a[0][1] 等价于1004;

a[1]  等价于*(a+1)等价于1016

a[1]+2  等价于 *(a+1) + 2 等价于&a[1][2]等价于1024 ,注意啊不要把*(a+1)+2写成*(a+3),那就变成a[3]了

(6)a[0]+1,&a[0][1] ,*a+1,代表第0行第1列元素地址;

那么 *( a[0]+1)就是 a[0][1]的值;*(*a+1)也是a[0][1]的值;

也有 *(a[1]+2),a[1][2],*(*(a+1)+2) 第1行第2列元素值 

 

2. 指针数组和数组指针

(1)指针数组:

int *p[10];

这是个数组,数组中有10个元素,每个元素都是个指针,所以这相当于定义了10个指针,分别为p[0] –p[9];

int a[3][4];

for(int i = 0; i < 3; i++)

{

for(int j = 0; j < 4 ; j++)

{

a[i][j] = 86;

}

}

int *p[4]; //能引用的下标[0] – [3]

p[0] = &a[0][0];

p[1] = &a[0][1];

p[2] = &a[0][2];

p[3] = &a[0][3];

for(int i=0; i < 4; i++)

{

printf("value = %d\n",*p[i]);

}

不能使用p = a进行赋值

(2)数组指针:

int (*p) [10];

这是一个指针变量,这个指针变量用来指向含有10个元素的一维数组。

int (*p)[10];

int a[10];

for(int i = 0; i < 10; i++)

{

a[i] = i;

}

p = &a; //注意到这里要用&地址符,否则编译会报错,但&a和a其实值相同。

int *q;

q = (int*)p;

for(int i = 0; i < 10; i++)

{

printf("value = %d\n", *q);

q++;

}

p++;    //会跳40个字节

附图(二维数组的各种表示情况):

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值