日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【c++】5.函数传指针与传值特容易混淆的点

發布時間:2025/3/21 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【c++】5.函数传指针与传值特容易混淆的点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數傳指針與傳值特容易混淆的點

這里只做一部分的解析,詳解請參考 指針參數傳遞動態內存 https://blog.csdn.net/daaikuaichuan/article/details/77229599

參考 https://bbs.csdn.net/topics/240071177

傳指針的目的是改變指針指向單元的值,而不是改變指針本身(即指針表示的地址).

如果函數參數是指針類型,需要具體分析:
見后面的代碼中:
void swap1(int *p1, int *p2) 是傳值,只不過這個值是個指針(地址);
void swap2(int *p1, int *p2)是傳指針,在函數內部是更改p1和p2指向的值,這也是我們最常用的方式。
如果函數內部是改變指針的指向(地址),則相當于傳值,雖然在函數內形參p1和p2指針指向改變了,但是調用了該函數之后,形參對應的實參p1和p2的指向地址完全沒改變。
p1,p2 是通過值傳入函數的,只不過這個值是個指針(地址),可看作函數局部變量。

#include <string.h>#include <iostream> #include <map> #include <string> #include <vector>// g++ -std=c++11 main.cpp -o main/*** // 此函數改變的是指針指向,不是指針指向地址的值。 void GetVersion(char *pStr) {pStr = new char(100); }int main() {char *version = NULL;GetVersion(version);printf("String = %s, Address = %u\n", version, version);delete version;return 0; } ***/// 改變指針的指向(地址),相當于傳值,雖然在函數內形參p1和p2指針指向改變了,但是調用了該函數之后,形參對應的實參p1和p2的指向地址完全沒改變,交換失敗 // p1,p2 是通過值傳入函數的,只不過這個值是個指針(地址),可看作函數局部變量。 void swap1(int *p1, int *p2) {std::cout << "p1= " << p1 << std::endl;std::cout << "p2= " << p2 << std::endl;int *temp = NULL;if (*p1 < *p2) {temp = p1;p1 = p2;p2 = temp;}std::cout << "p1= " << p1 << std::endl;std::cout << "p2= " << p2 << std::endl; }// 改變指針指向的內容,交換成功 void swap2(int *p1, int *p2) {int temp = 0;if (*p1 < *p2) {temp = *p1;*p1 = *p2;*p2 = temp;} }// 傳指針的目的是改變指針指向單元的值,而不是改變指針本身(即指針表示的地址). int main(int argc, char *argv[]) {int a = 2, b = 3;std::cout << "a= " << a << " , "<< "b= " << b << std::endl;int *pointer_1, *pointer_2;pointer_1 = &a;pointer_2 = &b;std::cout << "pointer_1= " << pointer_1 << std::endl;std::cout << "pointer_2= " << pointer_2 << std::endl;swap1(pointer_1, pointer_2);std::cout << "swap1:" << std::endl;std::cout << "*pointer_1= " << *pointer_1 << " , "<< "*pointer_2= " << *pointer_2 << std::endl;std::cout << "pointer_1= " << pointer_1 << std::endl;std::cout << "pointer_2= " << pointer_2 << std::endl;swap2(pointer_1, pointer_2);std::cout << "swap2:" << std::endl;std::cout << "*pointer_1= " << *pointer_1 << " , "<< "*pointer_2= " << *pointer_2 << std::endl;return -1; }

總結

以上是生活随笔為你收集整理的【c++】5.函数传指针与传值特容易混淆的点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。