C语言指针数组维度有关问题

C语言指针数组维度问题!
int main(int argc,int *gars[])  // 这里的int *gars[]指针数组不是一维的吗?为什么这样定义是二维的?
{                                           //不是很明白,求大神解释下,谢谢!
if (argc < 4)
{
printf("参数不足,程序退出\n");
return 0;
}
int x = atoi(gars[1]);
int y = atoi(gars[3]);
char symbol=*gars[2];      // gars[2][0]
switch (symbol)
{
case '+':printf("%d\n", x + y); break;
case '-':printf("%d\n", x - y); break;
case '*':printf("%d\n", x * y); break;
case '/':if (y != 0)
{
printf("%d\n", x / y); break;
} else
 {
 printf("程序错误,被除数不能为0!\n"); break;
 }
}
// printf("%s\n", gars[0]);
return 0;
}
------解决思路----------------------
引用:
Quote: 引用:

因为一级数组会退化成指针,所以总共是一个二级指针,函数参数中的数组均会退化为指针,所以你的int *gars[]在这里就和int** gars等价



我对数组的退化不是很了解,能解释下给我听吗? 谢谢啊!



退货后他就只是一个指针,指向数组首元素,退化前用sizeof运算符是可以得到数组的长度,退化成指针后得到的将是指针的长度(32位下为4)

具体可以参看《C++必知必会》条款6

C语言指针数组维度有关问题