c语言 数组类型,理解c语言数组类型

抛砖:数组类型,压死初学者的三座大山

1、数组类型;数组名

2、数组指针;与数组名同等级还是上一级需要&才能赋值

3、数组类型和数组指针的关系;

先以一维数组为例;int a[10]; int *a1; int (*a2)[10];

a;a数组的首地址,即为指针其指向的类型就是int,则a可等效于a1.其区别在于a是常量不能修改a = a+1;这一修改,而a1是变量,两者都可以进行加减法。

a1;是指向一个int类型的指针。

a2;其实一个指针,指向的是一个int 【10】的数组类型。因此可以a2 = &a;这样数据类型才对齐。

在以二维为例int b[][10];int (b1)[10];同样b是常量不能改变,b1是变量。

b;b是数组的首地址,即为指针其指向的是int 【10】的数组,因此加减法的基本单位为40个字节。

因此b+1就是第二行的首地址,(b+1)才是第二行数组的首地址。再取*才是数组的值了。

而b1其指向的类型与b是一致的,因此两则可以b1 = b;

#include int main()

{

int b = 10;

int a[10]={1,5,3,4,10,6,7,8,9,0};

int a1[][10]={

{1,2,3,4,5,6,7,8,9,0},

{10,2,3,4,5,6,7,8,9,0}

};

printf("%d\n",b);//b变量做右值表示取值

b = 12; //b变量做左值表示操作b空间。

printf("%d\n",*(a+1)); //a是一个地址,其加法的基本单位是int(因为下一层次是int类型)加4再取值就是第二个元素

printf("%d\n",(*a+1));//先取值再加1.

//同理理解二维数组。

//a1+1;则表示跳转到第二行,表示第二行的首地址,是第二行的地址而不是第二行数组的首地址

//*(a1+1);这个才表示第二行数组的首地址。打印的值是一样的,但是其数据类型不是一样的。

printf("%d\n",*(*(a1+1)+2));

以上是数组类型的测试/

///下面是关于数组指针类型的测试///

int *p = NULL;

int (*p1)[10] = NULL;//优先级问题,* []是同一等级再从右往左,因此要打括号。

p = a;

printf("%d\n",*(p+1));

p1 = &a;

printf("%d\n",*((*p1+1)+1));

p1 = a1;

printf("%d\n",*((*p1+1)+1));

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值