C语言指针数组维度问题!

libinden71 2015-10-30 08:13:54
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;
}
...全文
238 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2015-10-31
  • 打赏
  • 举报
回复
引用 8 楼 libinden71 的回复:
[quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 libinden71 的回复:] [quote=引用 5 楼 paschen 的回复:] 因为一级数组会退化成指针,所以总共是一个二级指针,函数参数中的数组均会退化为指针,所以你的int *gars[]在这里就和int** gars等价
我对数组的退化不是很了解,能解释下给我听吗? 谢谢啊![/quote] 退货后他就只是一个指针,指向数组首元素,退化前用sizeof运算符是可以得到数组的长度,退化成指针后得到的将是指针的长度(32位下为4) 具体可以参看《C++必知必会》条款6 这个我知道!我不懂的是 为什么是一个二级的指针!,int *gars[] 不是一个一级指针吗? [/quote] int[]退化成int* int*[]退化成int**
libinden71 2015-10-31
  • 打赏
  • 举报
回复
明白了 !感谢大神!
libinden71 2015-10-31
  • 打赏
  • 举报
回复
引用 7 楼 paschen 的回复:
[quote=引用 6 楼 libinden71 的回复:] [quote=引用 5 楼 paschen 的回复:] 因为一级数组会退化成指针,所以总共是一个二级指针,函数参数中的数组均会退化为指针,所以你的int *gars[]在这里就和int** gars等价
我对数组的退化不是很了解,能解释下给我听吗? 谢谢啊![/quote] 退货后他就只是一个指针,指向数组首元素,退化前用sizeof运算符是可以得到数组的长度,退化成指针后得到的将是指针的长度(32位下为4) 具体可以参看《C++必知必会》条款6 这个我知道!我不懂的是 为什么是一个二级的指针!,int *gars[] 不是一个一级指针吗?
paschen 2015-10-31
  • 打赏
  • 举报
回复
引用 6 楼 libinden71 的回复:
[quote=引用 5 楼 paschen 的回复:]
因为一级数组会退化成指针,所以总共是一个二级指针,函数参数中的数组均会退化为指针,所以你的int *gars[]在这里就和int** gars等价



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


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

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

libinden71 2015-10-31
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
因为一级数组会退化成指针,所以总共是一个二级指针,函数参数中的数组均会退化为指针,所以你的int *gars[]在这里就和int** gars等价
我对数组的退化不是很了解,能解释下给我听吗? 谢谢啊!
paschen 2015-10-31
  • 打赏
  • 举报
回复
因为一级数组会退化成指针,所以总共是一个二级指针,函数参数中的数组均会退化为指针,所以你的int *gars[]在这里就和int** gars等价
  • 打赏
  • 举报
回复
任何传进函数的指针,数组(实参)参数,都是指针(形参),即变量的地址 其实它就是char **argv。
wang0635 2015-10-30
  • 打赏
  • 举报
回复
gars 是指针数组,不是二维数组 数组中每个元素都是指向 char 型的指针,或者说指向字符串的指针 在windows中,你的程序,如果可执行文件名字是 asd.exe 在命令窗口中输入 asd 12 + 34 gars[0] 指向 "asd.exe" gars[1] 指向 "12" gars[2] 指向 "+" gars[3] 指向 "34" 它们都是 char* 型的 指针都可以后加[ ],如 p[1] 就是 *(p+1),p[0] 就是 *p,gars[2][0]就是 *(gars[2])
beyondzd2000 2015-10-30
  • 打赏
  • 举报
回复
应该是 int main(int argc, char * argv[]) 吧? 或者 int main(int argc, char ** argv) int main(int argc, char *argv[]) { printf("arg = %s, %s \n", argv[1], argv[2]); return 0; } test@/samba/test$ ./a.out Hello World arg = Hello,World
libinden71 2015-10-30
  • 打赏
  • 举报
回复
大晚上 脑子太累 printf("程序错误,被除数不能为0!\n"); 这条写错了,别在意!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧