c - 递增 C 指针

标签 c pointers

我认为如果一个指向 char 数组的 c 指针被递增,那么它将指向该数组中的下一个元素。但是当我尝试这个时,我发现我必须增加它两次。尝试使用 sizeof(char) 进行增量,我发现添加 char 的大小太多,因此必须将其除以二。

#include <stdio.h>

int main(int argc, char * argv[]){
   char *pi;
   int i;
   pi = argv[1];
   printf("%d args.\n",argc-1);
   printf("input: ");
   for(i=0;i<argc-1;i++){
      printf("%c, ",*pi);
      /*The line below increments pi by 1 char worth of bytes */
      //pi+=sizeof(pi)/2;
      /* An alternative to the above line is putting pi++ twice - why? */
      pi++;
      pi++;
   }
   printf("\n");
   return 0;
}

我做错了什么吗?还是我误解了递增指针的方法?

最佳答案

sizeof(char) 保证为 1,但 sizeof(char*) 不是。

尽管如此,您的函数只是偶然起作用

例如,尝试使用以下参数调用它:

abc defg

这将产生:

2 args.
input: a, c,

这是完全错误的。问题是您正在递增指向 argv 的元素 1 的指针,而不是指向 argv 的指针。

试试这个:

#include <stdio.h>

int main(int argc, char * argv[]){
   char **pi;
   int i;

   pi = argv + 1;
   printf("%d args.\n",argc-1);
   printf("input: ");
   for(i=0;i<argc-1;i++){
      printf("%c, ",**pi);
      pi++;
   }
   printf("\n");
   return 0;
}

这将打印每个参数的第一个字符:

2 args.
input: a, d,

关于c - 递增 C 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/312648/

相关文章:

c - C在链表中查找字符串

使用具有固定大小类型的 scanf/printf(和系列)的正确方法?

c - 我检查字符串内容和长度的程序有一些问题

C++ char * const vs char *,为什么有时一个有时另一个

C++:我应该将构造函数主体中分配给的指针成员初始化为 NULL 吗?

c - 下面程序的输出是什么?

c - 读取文本文件的完整内容后 fread() 失败

c - 我在编译和运行我的 C 程序时遇到问题。命令是什么?

c - 返回 main 时内存分配不是 "hold"

arrays - 如何在 C 中打印出未知大小的字符串数组?