我正在尝试访问'c'中此预初始化的char
指针的所有元素。这是代码:
#include <stdio.h>
#include <stdlib.h>
void main()
{
char **s="Hello";
printf("%c",*(*&s+1));
}
此代码应输出“ e”,但不输出。我在做什么错了?
此外,我如何一个接一个地访问所有元素?
答案 0 :(得分:3)
s
的类型不正确。字符串常量"Hello"
的数组类型可以衰减为类型char *
,但是您将其分配给类型为char **
的变量。
将s
的类型更改为char *
,您的代码将输出“ e”:
char *s = "Hello";
还要看这个:
*(*&s+1)
当*
刚好在&
之前时,它们会互相抵消。因此,您可以将其简化为:
*(s+1)
或等效地:
s[1]
答案 1 :(得分:0)
假设您没有看到Hello的“ e”,我强烈建议您看这篇文章。
What to do when the pointer doesn't print the string properly
总结一下,当您引用指针s时,它仅读取Hello的H(因为字符串的指针就是这样工作的-它指向字符串的第一个字符,例如s [0]),结果导致您的代码仅打印出H。
最重要的是,您的指针是双指针,这是不正确的。
以这种方式尝试。
#include <stdio.h>
#include <stdlib.h>
void main()
{
char s[] = "Hello";
printf("%s\n",s);
}