二维数组 C语言优先级记忆Tips

来源:互联网 发布:super kamagra 淘宝 编辑:程序博客网 时间:2024/06/05 10:27

引入:
一维数组的定义:
动态创建一维数组 :int * arr=(int * )malloc(10* sizeof(int));

1.二维数组的定义:
如创建3行4列的数组
第一种方法:

int main(){   int count=0;   int** arr=(int**  arr)malloc(3*sizeof(int*));//开辟二维数组,3行   forint i=0;i<3;i++)   {     arr[i]=(int*)malloc(4*sizeof(int));//循环的为每一行分配4列   }   for(int i=0;i<3;i++)   {     for(int j=0;j<4;j++)     {     arr[i][j]=count++;     }   }return 0;}

若赋值成功,则表明创建二维数组成功
第二种方法:

int main(){  int (*arr)[4]=(int (*)[4])malloc(3*4*sizeof(int));      //指针变量arr指向包含4个整型元素的一维数组  for(int i=0;i<3;i++)    {      for(int j=0;j<4;j++)      {         arr[i][j]=count++;      }    }return 0;}

因为arr是数组指针,所以定义时容易出错,尤其是括号的使用,此时若用typedef代替二维数组的类型,会简单许多,如

typedef  int (*Arr)[4];//Arr为指向数组的指针,每个数组包含4个整型单元Arr arr=(Arr)malloc(3*4*sizeof(int));

2.调用二维数组时的实参与形参的格式
因为我常常在调用二维数组是出现形参与实参的类型不兼容的错误,所以总结了目前所学的几种有关二维数组的调用,日后会不断进行补充。
如 int arr[10][10];

实参为arr时,arr是二维数组,调用的形参应该是指向数组的指针,故形参为int (* arr)[10];或者,形参可以写作int arr[][10];因为第一个长度可以省略。

实参为( int * )arr时,是将指向数组的指针传入形参,将二维数组当做一维数组,或者实参为&arr[10][10]时,是将二维数组的首地址传入形参,此时形参为int* arr
总结如下图所示:

这里写图片描述

3.C语言优先级记忆口诀

先简单的背两句话:“单算移关与,异或逻条赋”
接下来解释这两句话:
单:单目运算符:逻辑非(!)、按位反(~),自增(++)、自减(- -)、取地址(&)、解引用(*)、正号(+)、负号(-)、sizeof //【结合方向从右至左】
算:算术运算符:*、/、%优先级高于+、-
移:按位左移(<<)、按位右移(>>)
关:关系运算符:大小关系(>、>=、<、<=)高于相等不相等关系(==、!=)
与:按位与(&)
异:按位异或(^)
或:按位或(|)
逻:逻辑运算符:逻辑与(&&)高于逻辑或(||)
条:条件运算符(?:) //【从右至左】
赋:赋值运算符(=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=) //【从右至左】
另,括号成员排第一,即括号运算符() []和 . ->优先级最高
逗号运算符(,)级别最低

注:C语言优先级记忆口诀来源于网络,如侵权即删

原创粉丝点击