試圖將結構指標陣列傳遞給函式doIt()。看起來我的方法并不正確,因為我無法獲得正確的第二個陣列元素:
struct c {
int a;
char* b;
};
struct cc {
int a;
c* b;
};
char a[] = "aaa"/span>;
char b[] = "bbb";
char e[] = "eee";
c d1 = {1,a};
c d2 = {2,b};
c d3 = { 12,e };
cc g1 = { 123, & d1 };
cc g2 = { 321, &d2 };
cc g3 = { 333, &d3 };
void doIt( c * s)/span>
{
cout << s->b;
s ;
cout << s->b;
什么是傳遞結構指標陣列的正確方法?
uj5u.com熱心網友回復:
C(和C )中的原始陣列只是指標。它們指向一個陣列的第一個元素。例如,如果你想要一個int的陣列,你會寫成int* array。如果你想要一個結構c的陣列,你可以寫成c* array。如果你想要一個指向struct c的陣列,你可以寫成c*陣列.
要訪問元素,不要使用array ,使用array[i],其中i是你要訪問的元素的索引(位置),0是第一個元素的索引,1是第二個,等等。
因此,你的代碼應該這樣:
void doIt(c** s)
{
cout << s[0]->b; //s[0] 是第一個元素。
cout << s[1]->b; //s[1]是第二個。
}
注意,在C 中,最好使用std::vector而不是原始陣列。
void doIt(std::vector<c*> s)
{
cout << s[0]-> b;
cout << s[1]->b;
}
uj5u.com熱心網友回復:
如果你想把陣列傳遞給一個函式,你還需要傳遞這個陣列的長度:
結構 c {
int a;
char* b = nullptr;
size_t size = 0;
};
void doIt(c* all, size_t length)。
int main()
{
char a[] = "aaa"/span>;
const size_t sizeOfA = sizeof(a)/sizeof(a[0] )。)
char b[] = "bbb"/span>;
const size_t sizeOfB = sizeof(b)/sizeof(b[0] )。)
char e[] = "eee";
const size_t sizeOfE = sizeof(e)/sizeof(e[0] )。
c d1 {1, a, sizeOfA};
c d2 {2, b, sizeOfB};
c d3 {12, e, sizeOfE};
c all[] = {d1, d2, d3};
const size_t length = sizeof(all)/sizeof(all[0] )。
doIt(all, length)。
return 0;
}
void doIt(c* all, size_t length)
{
if (! all)
{
std::cerr << "指向陣列的指標為空" << std::endl;
}
for (size_t i = 0; i < length; i)
{
for (size_t j = 0; j < all[i].size; j)
{
std::cout << all[i].b[j]。
}
std::cout << std::endl;
}
你可以使用std::vector。因此,你不需要使用額外的引數(向量的長度):
#include <iostream>
#include <vector>
#include <string>
結構 c {
int a;
std::string b;
};
void doIt(const std::vector<c> & myVector)。
int main()
{
std::vector<c> myVector;
myVector.emplace_back(1, "aaa") 。
myVector.emplace_back(2, "bbb") 。
myVector.emplace_back(12, "eee")。
doIt(myVector)。
return 0;
}
void doIt(const std::vector<c> & myVector)
{
for (size_t i = 0; i < myVector.size(); i)
{
std::cout << myVector[i].b << std::endl;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315465.html
標籤:
