C++指针数组传参问题,小白一枚望大神回帖,谢谢~

struct ITEM
{
unsigned int id_;
unsigned short level_;
};

void reset(ITEM* item[])
{

for (unsigned short i = 0; i < 3; i++)
{
item[i]->level_ = 3-i;
cout << item[i]->id_ << " " << item[i]->level_ << endl;
}
}

int main()
{
ITEM* item[10];
for (unsigned short i = 0; i < 10; i++)
{
ITEM tmp;
tmp.id_ = i;
tmp.level_ = i;
item[i] = &tmp;
cout << item[i]->id_ << " " << item[i]->level_ << endl;
}
reset(item);
system("pause");
return 0;

}

#include
using namespace std;
struct ITEM
{
unsigned int id_;
unsigned short level_;
};
void reset(ITEM item[])
{
for (unsigned short i = 0; i < 10; i++) //验证传入的数据的正确性
{
cout << item[i].id_ << " " << item[i].level_ <<"111"<< endl;
}
for (unsigned short i = 0; i < 3; i++)
{
item[i].level_ = 3-i;
cout << item[i].id_ << " " << item[i].level_ <<"222"<< endl;
}
for (unsigned short i = 0; i < 10; i++) //验证修改数据后的正确性
{
cout << item[i].id_ << " " << item[i].level_ <<"333"<< endl;
}
}
int main()
{
ITEM item[10];
for (unsigned short i = 0; i < 10; i++)
{

item[i].id_ = i;
item[i].level_ = i;
cout << item[i].id_ << " " << item[i].level_ <<"ddd"<<endl;
}
reset(item);
system("pause");
return 0;

}

void reset(ITEM* item[])这种用法有问题,

void reset(ITEM *item); 或者 void reset(ITEM item[]),

struct ITEM
{
unsigned int id_;
unsigned short level_;
};
void reset(ITEM** item)
{

for (unsigned short i = 0; i < 3; i++)
{

item[i]->level_ = 3-i;
cout << item[i]->id_ << " " << item[i]->level_ << endl;
}

}
int main()
{
ITEM* item[10];
for (unsigned short i = 0; i < 10; i++)
{
ITEM *tmp = new ITEM; //这里用非指针的临时变量可能有问题
tmp->id_ = i;
tmp->level_ = i;
item[i] = tmp;
cout << item[i]->id_ << " " << item[i]->level_ << endl;
}
reset(item);
getchar();
return 0;

}

你这应该不是指针传参的问题,你指针传参没问题,错在main里面的for循环

以上程序经验证,传输参数是正确的,不知是否能帮到你

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include

using namespace std;

struct ITEM
{
unsigned int id_;
unsigned short level_;
};
void reset(ITEM* item_arr[])
{
cout << endl;
for (unsigned short i = 0; i < 3; i++)
{
item_arr[i]->level_ = 3-i;
cout << item_arr[i]->id_ << " " << item_arr[i]->level_ << endl;
}
}
int main()
{
ITEM** item_arr = new ITEM* [3];
for (unsigned short i = 0; i < 3; i++)
{
item_arr[i] = new ITEM();
item_arr[i]->id_= i;
item_arr[i]->level_ = i;
cout << item_arr[i]->id_ << " " << item_arr[i]->level_ << endl;
}
reset(item_arr);
//释放内存
for (unsigned short i = 0; i < 3; i++)
{
delete []item_arr[i];
}
delete item_arr;
system("pause");
return 0;
}

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include

using namespace std;

struct ITEM
{
unsigned int id_;
unsigned short level_;
};
void reset(ITEM* item_arr[])
{
cout << endl;
for (unsigned short i = 0; i < 3; i++)
{
item_arr[i]->level_ = 3-i;
cout << item_arr[i]->id_ << " " << item_arr[i]->level_ << endl;
}
}
int main()
{
ITEM** item_arr = new ITEM* [3];
for (unsigned short i = 0; i < 3; i++)
{
item_arr[i] = new ITEM();
item_arr[i]->id_= i;
item_arr[i]->level_ = i;
cout << item_arr[i]->id_ << " " << item_arr[i]->level_ << endl;
}
reset(item_arr);
//释放内存
for (unsigned short i = 0; i < 3; i++)
{
delete []item_arr[i];
}
delete item_arr;
system("pause");
return 0;
}

0 0
1 1
2 2

0 3
1 2
2 1
请按任意键继续. . .