#include<iostream> using namespace std; #include<assert.h> #include <string> //复杂链表结构体 struct ComplexLinkNode { int data; ComplexLinkNode *m_pNext; ComplexLinkNode *m_pSibling; }; //ComplexLinkNode* 类型的参数传递 void test(ComplexLinkNode *pHead) { //给pHead赋值 pHead->data = 5; //申请一个新结点 ComplexLinkNode *pNode = new ComplexLinkNode(); pNode->data = 6; //修改pHead的指向 pHead = pNode; } //ComplexLinkNode* 类型的引用传递 void test2(ComplexLinkNode *&pHead) { //给pHead赋值 pHead->data = 5; //申请一个新结点 ComplexLinkNode *pNode = new ComplexLinkNode(); pNode->data = 6; //修改pHead的指向 pHead = pNode; } //ComplexLinkNode* 类型的地址传递 void test3(ComplexLinkNode **pHead) { //给pHead赋值 (*pHead)->data = 5; //申请一个新结点 ComplexLinkNode *pNode = new ComplexLinkNode(); pNode->data = 6; //修改pHead的指向 *pHead = pNode; } //int //参数传递 void change(int c) { c = 3; } //引用传递 void change2(int &c) { c = 3; } //地址传递 void change3(int *c) { *c = 3; } //int* //参数传递 void change(int *c) { *c = 3; } //引用传递 void change2(int *&c) { *c = 3; } //地址传递 void change3(int **c) { **c = 3; } //char //参数传递 void change(char c) { c = 'c'; } //引用传递 void change2(char &c) { c = 'c'; } //地址传递 void change3(char *c) { *c = 'c'; } //char* //不能改变内容,可以改变其地址 //参数传递 void change(char *c) { c = "cc"; } //引用传递 void change2(char *&c) { c = "cc"; } //地址传递 void change3(char **c) { *c = "cc"; } //char [] //相当于char *const //参数传递 void change11(char *c) { cout << (c) << endl; //aa *(c + 1)= 'd'; //c = "cc"; } //引用传递 void change12(char *&c) { c = "cc"; } //地址传递 void change13(char **const c) { *c = "cc"; } void change(string *s) { //cout << "c1:" << *s << endl; *s = "sss"; //cout << "c2:" << *s << endl; } int main(void) { //int cout << "int : " << endl; int a = 1; change(a); cout << "参数传递:" << a << endl; //1 change2(a); cout << "引用传递:" << a << endl; //3 change3(&a); cout <<"地址传递:"<< a << endl; //3 //int* cout << "int* : " << endl; //由于ab本身就是一个指针常量,所以三种传递方式都可以更改其值 int ab[] = { 1 }; int *aa = ab; change(aa); cout << "参数传递:" << *aa << endl; //3 change2(aa); cout << "引用传递:" << *aa << endl; //3 change3(&aa); cout << "地址传递:" << *aa << endl; //3 //////////////////////////////// //char cout << "char : " << endl; char c = 'a'; change(c); cout << "参数传递:" << c << endl; //'a' change2(c); cout << "引用传递:" << c << endl; //'c' change3(&c); cout << "地址传递:" << c << endl; //'c' //char* //相当于const char* cout << "char* : " << endl; char *cb = "ab"; //相当于const char*cc //cout << cc[0] << endl; change(cb); cout << "参数传递:" << cb << endl; //ab change2(cb); cout << "引用传递:" << cb << endl; //cc change3(&cb); cout << "地址传递:" << cb << endl; //cc //char [] //相当于char *const cout << "char []" << endl; char cc[] = { 'a', 'a', '\0' }; //相当于char * const cc change11(cc); cout << "参数传递:" << cc << endl; //ad //change12(cc); //cout << "引用传递:" << cc << endl; //change13(cc); //cout << "地址传递:" << cc << endl; //string 与 int 相同 string s = "ss"; string *ss = &s; change(&s); //s.append("ss"); cout << s << endl; cout << *ss << endl; //结构体类型 由于test(ComplexLinkNode* pHead)的函数参数为ComplexLinkNode*类型, //而调用函数时参数也是ComplexLinkNode*类型,此时函数调用跟参数传递方式一样. //此时可以修改pHead的内容, //也可以修改pHead的指向,但是在函数退出时pHead指向不会改变. cout << "结构体:" << endl; ComplexLinkNode *TC = new ComplexLinkNode(); test(TC); cout << TC->data << endl; //5 //要想让传递的pHead可以修改指向,则可以使用引用传递,指针传递 //引用传递 test2(TC); cout << TC->data << endl; //6 //地址传递 test3(&TC); cout << TC->data << endl; //6 return 0; }
C++ 函数参数传递 值传递,引用传递,地址传递
猜你喜欢
转载自blog.csdn.net/mayi_xiaochaun/article/details/49004271
今日推荐
周排行