1

据我所知,一个像

整数示例[10]

只不过是指向此数组中第一个元素的指针。

字符* argv[]

是一个指针数组;所以应该是指向其他指针的指针。

我现在有以下问题:

int main(int argc, char* argv[])
{
  double ptrarg2=argv[2][1];
  printf("beginletter=%c\nbeginpos=%d\n",&ptrarg2, ptrarg2);
  return 0;
}

我正在启动程序./program test并期望输出为:

beginletter=c
beginpos=123213123 

While123213123应该是实际存储 c 的地址。

我实际上得到:

beginletter=
beginpos=0

我究竟做错了什么?先感谢您!

4

2 回答 2

4

看起来argv[0]is will be "./program"argv[1]will be "test",并且argv[2]将是 undefined 或 NULL 因为你没有三个参数。的值argc应该告诉您 中有多少项目argv[]。在这种情况下,我的猜测是答案将是 2,因此只有前两个 (argv[0]argv[1]) 是有效的。

这里还有其他一些奇怪的事情。ptrarg2被声明为双精度,而不是字符;这里的行为是将字符转换为其等效的浮点数字并存储它。也许你的意思ptrarg2是成为一个字符?

接下来, 与printf()它的附加参数不太对应。&ptrarg2是 a double *,但您将其分配给%c(字符)字段,而不是%p(指针)字段。ptrarg2是 a double,但您将其分配给%d(十进制数)字段,而不是%lf(长浮点数,又名双精度)字段。printf即使您的类型不匹配,也会很乐意尝试打印出值,但它们会出错,并且很有可能崩溃。

于 2013-08-07T00:27:42.827 回答
1

&ptrarg2是局部变量的地址,这不是您期望的地址。只需使用argv[1][0]argv[1]argv[1][0]会给你第一个参数的第一个字符,并且argv[1]会给你指向第一个参数的指针。

#include <stdio.h>

int main(int argc, char* argv[])
{      
  printf("beginletter=%c\nbeginpos=%p\n",argv[1][0], argv[1]);
  return 0;
}
于 2013-08-07T00:27:00.817 回答