C语言中定义int a[10][10],a是什么类型? 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可以這樣取值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的数组,用指针来理解的话就是一个指针数组的首地址 本文来源:https://www.wddqw.com/doc/8c1ea4d0b8d528ea81c758f5f61fb7360b4c2bf8.html