C中获取字符串的指针算法

C中获取字符串的指针算法,c,pointers,pointer-arithmetic,C,Pointers,Pointer Arithmetic,我想获取字符数组的元素,但没有成功,问题是我只获取第一个和最后一个元素,除此之外,我的代码是: void getcharacters(char *cad) { int l; int *i; l=strlen(cad); for (i=&cad[0];i<&cad[l];i++){ printf("%c\n",*cad); } } void getcharacters(char*cad) { int l; int*i; l=斯特伦(cad); 对于(i=

我想获取字符数组的元素,但没有成功,问题是我只获取第一个和最后一个元素,除此之外,我的代码是:

void getcharacters(char *cad)
{
 int l;
 int *i;
 l=strlen(cad);
 for (i=&cad[0];i<&cad[l];i++){
     printf("%c\n",*cad);
 }
}
void getcharacters(char*cad)
{
int l;
int*i;
l=斯特伦(cad);

对于(i=&cad[0];i而言,
int
的大小可以是
char
大小的4倍,因此当您执行
i++
时,实际上跳过了3个char

此外,您还可以打印出
*cad
,而不是
*i


要将更改
i
修改为
char*
并打印
*i
而不是
*cad

,您对所有printf使用相同的字符(
*cad
cad[0]
)。您需要的是在每次迭代中使用索引来获取下一个字符。我还需要是指向char的指针:

void getcharacters(char *cad)
{
 int l;
 char *i;
 l=strlen(cad);
 for (i=&cad[0];i<&cad[l];i++){
     printf("%c\n", *i );
 }
}
void getcharacters(char*cad)
{
int l;
char*i;
l=斯特伦(cad);

对于(i=&cad[0];i为什么不从第一个字符迭代到最后一个字符,并作为数组索引访问它们

int i;
int l=strlen(cad);
for (i=0;i<l;i++)
{
  printf("%c\n",cad[i]);
}
inti;
int l=斯特伦(cad);

对于(i=0;i其他答案已经告诉了您为什么它不起作用,我想知道为什么您不只是迭代到空终止符

void getcharacters(char *cad)
{
 char *i;
 for (i = cad; *i; i++) {
     printf("%c\n",*i);
 }
}

i
不应该声明为
char*i
吗?还有,为什么打印*cad?它从不从第一个字符开始更改。也许您打算打印
*i
而不是
*cad
i
应该是
*char
而不是
*int
int
可以大到4个
char哈哈,我想说的是,
char
不能保证与
int
的大小相同(而且在大多数情况下,它们永远不会相同)@AlvinWong通常是sizeof(int)==4,而sizeof(char)==1,我相信