日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

函數(shù)傳指針與傳值特容易混淆的點

這里只做一部分的解析,詳解請參考 指針參數(shù)傳遞動態(tài)內(nèi)存 https://blog.csdn.net/daaikuaichuan/article/details/77229599

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

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

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

#include <string.h>#include <iostream> #include <map> #include <string> #include <vector>// g++ -std=c++11 main.cpp -o main/*** // 此函數(shù)改變的是指針指向,不是指針指向地址的值。 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; } ***/// 改變指針的指向(地址),相當于傳值,雖然在函數(shù)內(nèi)形參p1和p2指針指向改變了,但是調(diào)用了該函數(shù)之后,形參對應(yīng)的實參p1和p2的指向地址完全沒改變,交換失敗 // p1,p2 是通過值傳入函數(shù)的,只不過這個值是個指針(地址),可看作函數(shù)局部變量。 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; }// 改變指針指向的內(nèi)容,交換成功 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; }

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。