分享

C语言中定义int a[10][10],a是什么类型?

 thchen0103 2017-02-04

1.

a不是指针,a是数组,c 语言里的数组,它是一个二维数组,它和c 语言的基本数据类型不一样,属于构造类型

如果是指针,sizeof(a)的值就是4了,可惜不是. sizeof(a)的值是这个类型大小,可以写代码打印出来这个值看看,一目了然

数组名可以给指针复制,是因为c 语言为了提高访数组问效率,做了这种处理,尤其在把数组名当做实参传入函数的时候,这种方式十分有用,同时也导致初学者容易将指针和数组混淆起来


2.

int输入法表示的数据类型是整形。

int a 表示a这个变量是整型,只能存放整数。

int a【10】【10】

指的是代表a的二维数组,是指向一个有十个元素的数组的指针,或者说a是具有十个元素的数组的首元素的地址,这十个元素,每个元素都是一个数组。

简略的说,A就是整型二维组

3.

1.在C语言的定义中,二维数组可以看作一个一维数组,每个元素还是一个一维数组。

int a[m][n];

表示一个包含m个元素的一维数组,每个元素是一个包含n个整型数据的一维数组。(参考K&R C 第二版 5.7 Multi-dimensional Arrays)

2.在C语言中,指针和数组有相似之处,但是两者本质不同。两者相似的地方有两点:

  • 读取数组元素
  • 函数传递

就二维数组来说,“相似”的指针应该指向和二维数组的子数组相同的数据类型,如

int (*p)[n] = a;

此时可以用a[i][j]p[i][j]*(p+i)[j]*(a+i)[j]来获取相同的数据。

在声明一个接受一个二维数组的函数原型时,会忽略第一层数组的长度,等效的是上述指针类型的参数。即下面两种函数原型的声明都可以成功接受a做参数:

void f1(int a[][n]);

void f2(int (*a)[n]);

(参考K&R C 5.3 5.4 5.7)

3.而数组的本质并不是指针类型,虽然C语言在实现上很多时候两者表现可以相同,但是数组的标志符(如a)是不能作为指针用的。你不能将a“指向”另一个数组,或者说不能向数组赋值,或者说数组除了初始化的时候,不能作为左值

int b[m][n]; a = b; /* 这是错的*/

a = {... ...}; /* 也是错的 */

同样上述的指针p也不能作数组用,因为指针的初始化只会申请指针本身的空间:

int (*p)[m] = {... ...}; /* 也是错的 */

最后,可以学习《你必须知道的495个C语言问题》第6章 “数组和指针”里边的问题,或许有你遇到的问题。

4.

嗨,是指向二維數組(Array)的指針(Pointer)沒錯

假設要取第i個row,第j個column的值, 0<=i,j<10,代表index

可以這樣取值

int b=*(*(a+i)+j); 當然也可以用一般Array表示法取值int b=a[i][j]; 一般是用來存取矩陣(Matrix),做矩陣運算時最常使用二維,但如果是稀疏矩陣(Sparse Matrix),即有使用的index很少,則以Linked List實現較佳

5.int a,则a是int类型

int【】 a,则a是int【】类型

int【】【】a,则a是int【】【】类型

6.

就是一个地址,是一个常量不可修改,是一个包含10个元素的数组的首地址,注意是元素不是int,每个元素都是一个包含10个int的数组,用指针来理解的话就是一个指针数组的首地址

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多