据我所知,像这样的数组
int example[10]
只不过是指向此数组中第一个元素的指针。
char* 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
而123213123
应该是c实际存放的地址。
我实际上得到:
beginletter=
beginpos=0
我做错了什么?提前致谢!
最佳答案
看起来 argv[0]
将成为 "./program"
,argv[1]
将成为 "test"
和 argv[2]
将是未定义的或 NULL,因为您没有三个参数。 argc
的值应该告诉您 argv[]
中有多少项。在这种情况下,我的猜测是答案将是 2,因此只有前两个(argv[0]
和 argv[1]
)是有效的。
这里还发生了一些其他奇怪的事情。 ptrarg2
声明为 double,而不是 char;这里的行为是将字符转换为其等效的 float 字并存储它。也许您的意思是 ptrarg2
是一个字符?
接下来,printf()
与其附加参数的对应关系不是很好。 &ptrarg2
是一个 double *
,但您将其分配给 %c
(字符)字段,而不是 %p
(指针)字段。 ptrarg2
是一个 double
,但您将其分配给 %d
(十进制数)字段,而不是 %lf
(长 float ,又名 double )字段。 printf
会很乐意尝试并打印出值,即使您的类型不匹配,但它们是错误的,并且很可能会崩溃。
关于c - 指向二维数组的一个字符的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092698/