【问题标题】:Displaying a char pointer using similar syntax as a char array?使用与字符数组类似的语法显示字符指针?
【发布时间】:2020-10-14 15:20:10
【问题描述】:

因此,在数组中,您可以使用 [i] 从一个索引移动到下一个索引。我知道你可以通过增加指针的内存地址来做类似的事情:

pMyPointer++;

但是你可以使用与数组类似的语法(使用 [ ])循环指针吗?我是 C 新手,所以如果可以,为什么,它是如何工作的,正确的语法是什么?我想它看起来像:

#define MAXLENGTH 5

...

char* pMyString = myString;

for(int i = 0; i < MAXLENGTH; i++)
    printf("%c", *pMyString[i])

【问题讨论】:

  • 你不需要*,应该是pMyString[i]
  • ptr[i] 等价于*(ptr + i)
  • @Barmar 我明白了,谢谢你的解释!

标签: arrays c pointers output


【解决方案1】:
#define MAXLENGTH 5

...

char* pMyString = myString;//No &: if myString is an array, it's already an address, so no & needed

for(int i = 0; i < MAXLENGTH; i++)
{
    printf("%c", *pMyString); ++pMyString;
}

或者你可以printf("%c",pMyString[i]);

底线与上面的 cmets 相同:您可以将 ptr[i] 写成 *(ptr+i),反之亦然——它们的含义相同。

这是一个更好的方法:

while (*pMyString)
{
  printf ("%c",*pMyString); ++pMyString;
}

这很酷的原因是您不再被绑定到 MAXLENGTH - 它会一直运行到'\0',字符串字符的结尾。

【讨论】:

  • 第一个打印第一个字符五次。
  • “如果 myString 是一个数组,它已经是一个指针”——这是错误的。数组和指针在 C 中是不同的类型。数组可以隐式转换为指针,但这并不意味着它们与指针相同。
  • 伊恩,康拉德,您的担忧已得到解决。那家伙,这就是你想要的答案吗?
猜你喜欢
  • 2011-08-27
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
相关资源
最近更新 更多