我认为如果一个指向 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/