c - 指向二维数组的一个字符的指针

标签 c arrays pointers argv

据我所知,像这样的数组

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/

相关文章:

c - 为什么插入到列表中需要一个指向指针的指针

c - Windows API的CreateFile()中OPEN_ALWAYS和CREATE_ALWAYS的区别

c - 关于数组和指针的存储

arrays - 理解 Swift 中元组数组的语法

java - 如何对数组进行升序排序?

python - 如何访问python列表列表中的列

c++ - 传递接受 void * 的成员函数

计算最小硬币数错误

C编程: create instances of a struct inside a function

pointers - Julia:如何获取指针指向的数组?