我在上大学,我们正在学习指针。我们的工作是输入一个char,将它与一个数组进行比较,并返回一个指向该数组中该char的第一个引用的指针。但是,由于我不喜欢简单的事情,我已经问过我的老师,在阵列中不止一次使用这个字符。 这就是我头痛的开始。 所以我有这个代码。我们的想法是:创建一个函数,将输入字符串与整个数组进行比较,获取引用的指针并将它们保存在数组中并返回该数组。 不幸的是,它没有按我的意愿工作:( 什么可能是错的?
#include<iostream>
#include<cstdlib>
using namespace std;
char list [10];
int main()
{
initialize();
show();
cout<<search('1');
}
void initialize()
{
int i;
for(i=0; i<10;i++)
{
list[i]='1';
}
}
void show()
{
int i;
for(i=0; i<10;i++)
{
cout<<list[i];
}
}
int* search(char* input)
{
int* result[10];
int i;
char *temp;
for (i=0; i<10; i++)
{
*temp=list[i];
if(strcmp(temp, input) != NULL)
{
result[i]=i;
}
}
return result[];
}
答案 0 :(得分:0)
我在移动设备上,所以不幸的是我不能详细介绍,但是你要返回一个指向你在函数中创建的数组的指针,该数组在结束时超出了范围。功能
我的大量编辑:
正如大家已经说过的,C ++数组实际上只是指向数组中第一个元素的指针。因此,如果返回指向在函数范围内创建的数组的指针,则返回指向垃圾的指针。如果我这样做,我会使用vector
,但如果我被迫使用数组,我会使用类似下面的代码。希望这有帮助!
#include <iostream>
#include <cstdlib>
void initialize(char* list) {
for(int i = 0; i < 10; ++i) {
if(i < 4) {
list[i] = '2';
} else {
list[i] = '1';
}
}
}
void show(char *list) {
for(int i = 0; i < 10; ++i) {
std::cout << list[i] << ' ';
}
std::cout << std::endl;
}
// Note the function requires an additional argument that is a pointer
// this is how you can avoid returning a pointer
int search(char input, char* list, char* result) {
int j = 0;
for(int i = 0; i < 10; ++i) {
// comparing characters can be done via ==
if(input == list[i]) {
*(result + j) = list[i];
// You could use result[j], but I used this to show that
// result really is just a pointer to the first element
// of the array. As a result saying result[j] is the same
// as saying I want to deference j elements past the first
// element or *(result + j)
++j; // increment j
}
}
// return how many elements matched
return(j);
}
int main(int argc, char *argv[]) {
char list[10];
char temp[10];
initialize(list);
show(list);
int size = search('1', list, temp);
// create a dynamically sized array containing space for each match
// because we don't know the size at compile time we must use
// a library type or a dynamically sized array
char *result = new char[size];
for(int i = 0; i < size; ++i) {
result[i] = temp[i];
// again you could use result[i]
std::cout << *(result + i) << std::endl;
}
delete[] result; // otherwise you'll get a memory leak
return(0);
}