Я снова озадачен.Пожалуйста, не запрещайте мне задавать вопросы, если я могу получить подтверждение или ответы на свои вопросы, я могу узнать больше, и я буду признателен за это.Я просмотрел переполнение стека, и есть много вопросов, похожих на те, что я задавал, но они не помогают мне.Примечание. Вы можете скопировать и вставить приведенный ниже код здесь https://www.tutorialspoint.com/compile_cpp_online.php, и он будет работать.Я уверен, что мои вопросы просты для эксперта.
// --------------------------------------------------
#include <cstdlib>
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *link;
};
struct CDAccount
{
double balance;
double interest;
int term;
};
void get_data(CDAccount& the_account);
void head_insert(Node* &head, int the_number);
void changeArray(int array[]);
Node* search(Node* head, int target); // return type is an address in
//memory, where the address points to some Node.
int main(int argc, char *argv[]){
//Array demonstration.
int x[10] = {1,2,3,4,5,6,7,8,9,10};
for (int i=0; i<10; i++){
cout << x[i] << endl;
cout << x + i << endl;
}
cout <<endl << endl;
changeArray(x);
for (int i=0; i<10; i++){
cout << x[i] << endl;
cout << x + i << endl;
}
cout<< endl << endl;
Node* head = new Node; // head points to some Node.
cout << head << " pointing to some new Node containing 5 and new Node (see next lines)"<< endl << endl;
//cout << &head->data << endl; Same address as above.
(*head).data = 5; // head data content is 5.
(*head).link = new Node; // head pointer content points to 2nd Node.
cout << head->data << endl;
cout << head->link << endl << endl;
//(*((*head).link)).data = 20;
head->link->data = 20; // same as line before.
head->link->link = new Node;
cout << head->link->data << endl;
cout << head->link->link << endl << endl;
head->link->link->data = 25;
head->link->link->link = NULL;
cout << head->link->link->data << endl;
cout << head->link->link->link << endl << endl;
Node* found = search(head, 20);
cout<<"Target is at this address: " << found<<endl<<endl;
if(found != NULL){
cout<<(*found).data<<endl;
cout<<(*found).link<<endl;
}
CDAccount account;
account.balance = 100;
cout << account.balance << endl;
// SAME...
cout << &account <<endl;
cout << &account.balance<< endl;
// SAME...
cout << x << endl;
cout << &x[0] << endl;
//cout << account << endl; //WON'T WORK, WHY?
get_data(account);
cout << account.balance << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
void head_insert(Node* &head, int the_number)
{
Node* temp_ptr;
temp_ptr = new Node;
temp_ptr->data = the_number;
temp_ptr->link = head;
head = temp_ptr;
}
void get_data(CDAccount& the_account){
cout << "Inside function : " << &the_account << endl;
the_account.balance = 100000;
the_account.interest = 0.02;
the_account.term = 12;
}
void changeArray(int array[]){
array[2] = 7;
array[3] = 101;
}
Node* search(Node* head, int target)
{
Node* here = head;
if (here == NULL)
{
return NULL;
}
else
{
while (here->data != target && here->link != NULL)
here = here->link;
if (here->data == target)
return here;
else
return NULL;
}
}
// --------------------------------------------------
В нашей программе x - это массив, и в основном x [0], x [1], x [2] являются членами данных.Я могу сделать cout << x << endl;
, и моя программа скомпилируется, и она просто покажет мне адрес памяти, и он указывает на x [0].Но почему не работает cout << account << endl;
?Разве я не вижу адрес памяти?В частности, учетная запись указывает на первый элемент данных - это account.balance, верно?В PHP мне приходилось передавать массив по ссылке, чтобы он менялся вне функции, что еще больше смущает меня.Почему я не должен делать это в C ++, в то время как это должно быть сделано для структуры?... Так почему я не могу распечатать адрес памяти структуры?Я даже могу распечатать адрес памяти head, который является узлом *.
Так почему тип структуры передается по ссылке?the_account - это структура.Так же и массив.Тем не менее, мы передаем массивы без ссылки (&) и массив изменяется вне функции.Разве учетная запись не является просто адресом, который указывает на элементы данных, как массив ...?Это смущает меня.