为什么我为指针返回类型返回一系列字符?

时间:2017-07-07 23:07:24

标签: c++ pointers

我正在尽力返回一个具有特定值的指针。虽然,我不明白为什么我会比平常更多的字符。我问了几个人,我被告知我得到了一个子串?

问题:我输入单词hotdog。 我希望在索引[2]处返回一个指针。虽然相反,我得到了chars dog。这是为什么?我怎么才能获得索引[2]?我正在考虑解除引用它,但是我在使返回类型工作时遇到了问题。

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

import 'package:flutter/material.dart';

class MyHomePage extends StatefulWidget {
  MyHomePageState createState() => new MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {

  bool _enabled;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new Switch(
          value: _enabled,
          onChanged: (bool value) {
            setState(() {
              _enabled = value;
            });
          },
          activeThumbImage: new NetworkImage('https://lists.gnu.org/archive/html/emacs-devel/2015-10/pngR9b4lzUy39.png'),
          inactiveThumbImage: new NetworkImage('http://wolfrosch.com/_img/works/goodies/icon/vim@2x'),
        ),
      )
    );
  }
}

void main() {
  runApp(new MaterialApp(
    title: 'Flutter Demo',
    theme: new ThemeData(
      primarySwatch: Colors.deepPurple,
    ),
    home: new MyHomePage(),
  ));
}

2 个答案:

答案 0 :(得分:3)

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

char GetValueAtIndex(char * const c, int index){
    return *(c + index);
}

或简单地取消引用函数返回的指针:

std::cout << *GetValueAtIndex(pointer, 3);

当你有char*指针时:

char* p = "Hotdog";

并将p发送给std::cout,它将被视为指向(C样式字符串的第一个字符)的指针,并按此打印。 C样式字符串以\0结尾。因此,它将打印出p所指向的所有剩余字符所遵循的字符,直到它到达字符串\0的末尾。 如果你增加一个指针,那么指向下一个字符等:

char* p = "Hotdog";
p++;
std::cout << p;
p+=3;
std::cout << p;

如果您只需要打印p点的单个字符,然后发送一个解除指向std::cout的指针:

char* p = "Hotdog";
std::cout << *p;

答案 1 :(得分:0)

  

为什么我为指针返回类型返回一系列字符?

你返回一个指向一个角色的指针,就像你说出你要做的那样。

  

我希望在索引[2]

处返回一个指针

正如您所料,返回了指针。

  

虽然相反,我得到了chars dog。

这是因为您将指针插入流中。 char*的流插入运算符要求输入是指向空终止字符串的指针,行为是打印整个字符串。您的指针指向从字符'd'开始的字符数组。

  

我在考虑取消引用它

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

std::cout << *GetValueAtIndex(pointer, 3) << std::endl;