Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么要为指针返回类型返回一系列字符?_C++_Pointers - Fatal编程技术网

C++ 为什么要为指针返回类型返回一系列字符?

C++ 为什么要为指针返回类型返回一系列字符?,c++,pointers,C++,Pointers,我正在尽最大努力返回具有特定值的指针。尽管如此,我还是不明白为什么我会比平时得到更多的咒语。我问了几个人,他们告诉我,我得到了一个子串 问题:我输入单词hotdog。 我希望返回指向索引[2]的指针。不过,我得到了查尔斯的狗。为什么呢?如何获得索引[2]?我正在考虑取消对它的引用,但我在让返回类型正常工作方面遇到了问题 我无法更改函数的返回类型或参数 #include <iostream> char * GetValueAtIndex(char * const c, int ind

我正在尽最大努力返回具有特定值的指针。尽管如此,我还是不明白为什么我会比平时得到更多的咒语。我问了几个人,他们告诉我,我得到了一个子串

问题:我输入单词hotdog。 我希望返回指向索引[2]的指针。不过,我得到了查尔斯的狗。为什么呢?如何获得索引[2]?我正在考虑取消对它的引用,但我在让返回类型正常工作方面遇到了问题

我无法更改函数的返回类型或参数

#include <iostream>

char * GetValueAtIndex(char * const c, int index);
void ReadString(char * c, int length);

int main()

{
    const int size = 10;
    char ma[size];
    char * pointer = ma;

    ReadString(ma, 20);
    std::cout << GetValueAtIndex(pointer, 3) << std::endl;
    system("pause");
}

void ReadString(char * c, int length)
{
    std::cin.getline(c, length);
}


char * GetValueAtIndex(char * const c, int index)
{

    return c + index;

}
#包括
char*GetValueAtIndex(char*const c,int-index);
void ReadString(char*c,int-length);
int main()
{
常数int size=10;
字符ma[大小];
字符*指针=ma;
读取字符串(ma,20);

std::cout修改函数以返回值而不是指针:

char GetValueAtIndex(char * const c, int index){
    return *(c + index);
}
或者简单地取消引用函数返回的指针:

std::cout << *GetValueAtIndex(pointer, 3);
然后将
p
发送到
std::cout
它将被视为指向(a的第一个字符)的指针C样式字符串并按此方式打印。C样式字符串以
\0
结尾。因此,它将打印出
p
指向的任何字符,后跟所有剩余字符,直到到达字符串的末尾,即
\0
。 如果增加一个指针,则指针指向下一个字符等:

char* p = "Hotdog";
p++;
std::cout << p;
p+=3;
std::cout << p;
为什么要为指针返回类型返回一系列字符

您返回一个指向字符的指针,就像您声明要执行的操作一样

我希望返回指向索引[2]的指针

正如您预期的那样,该指针已返回

不过,我得到了查尔斯的狗

这是因为将指针插入到流中。
char*
的流插入运算符要求输入是指向以null结尾的字符串的指针,其行为是打印整个字符串。指针指向从字符
'd'
开始的字符数组

我正在考虑取消对它的引用

如果取消对指针的引用,将获得指向的字符(
'd'
):


std::我是否可以编辑这个问题,我无法更改函数的返回类型或参数。@don1123不允许sense@don1123如果返回指向该索引处的字符的指针,则在像在提供的代码中那样打印该指针时,只有在遇到
\0
字符时才会停止,并且仅在tring,这就是为什么示例的输出是
dog
,而不仅仅是
d
@Justin char*GetValueAtIndex(char*const c,int index)@Ron谢谢你的编辑。我真的很感激。我犯了一个错误,在编辑中忘记了一个动词。是我的错。我不能为这种特殊情况更改我的返回类型或参数。你为什么期望索引[2]?GetValueAtIndex使用偏移量3,即索引[3],以及“热狗”的第四个字母是“d”,所以我希望输出是“dog”
char* p = "Hotdog";
p++;
std::cout << p;
p+=3;
std::cout << p;
char* p = "Hotdog";
std::cout << *p;
std::cout << *GetValueAtIndex(pointer, 3) << std::endl;