我正在尽力返回一个具有特定值的指针。虽然,我不明白为什么我会比平常更多的字符。我问了几个人,我被告知我得到了一个子串?
问题:我输入单词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(),
));
}
答案 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;