c++基礎學習(05)--(指針,引用)

文章目錄

  • 目錄
    • 1.指針
    • 2.引用

目錄

1.指針

在這里插入圖片描述

#include <iostream>using namespace std;int main ()
{int  var1;char var2[10];cout << "var1 變量的地址: ";cout << &var1 << endl;cout << "var2 變量的地址: ";cout << &var2 << endl;return 0;
}

var1 變量的地址: 0x7ffd8696414c
var2 變量的地址: 0x7ffd86964150

在這里插入圖片描述

#include <iostream>using namespace std;int main ()
{int  var = 20;   // 實際變量的聲明int  *ip;        // 指針變量的聲明ip = &var;       // 在指針變量中存儲 var 的地址cout << "Value of var variable: ";cout << var << endl;// 輸出在指針變量中存儲的地址cout << "Address stored in ip variable: ";cout << ip << endl;// 訪問指針中地址的值cout << "Value of *ip variable: ";cout << *ip << endl;return 0;
}

Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int  var[MAX] = {10, 100, 200};int  *ptr;// 指針中的數組地址ptr = var;for (int i = 0; i < MAX; i++){cout << "Address of var[" << i << "] = ";cout << ptr << endl;cout << "Value of var[" << i << "] = ";cout << *ptr << endl;// 移動到下一個位置ptr++;}return 0;
}

Address of var[0] = 0xbfa088b0
Value of var[0] = 10
Address of var[1] = 0xbfa088b4
Value of var[1] = 100
Address of var[2] = 0xbfa088b8
Value of var[2] = 200

在這里插入圖片描述

#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int  var[MAX] = {10, 100, 200};int  *ptr;// 指針中第一個元素的地址ptr = var;int i = 0;while ( ptr <= &var[MAX - 1] ){cout << "Address of var[" << i << "] = ";cout << ptr << endl;cout << "Value of var[" << i << "] = ";cout << *ptr << endl;// 指向上一個位置ptr++;i++;}return 0;
}

Address of var[0] = 0xbfce42d0
Value of var[0] = 10
Address of var[1] = 0xbfce42d4
Value of var[1] = 100
Address of var[2] = 0xbfce42d8
Value of var[2] = 200
在這里插入圖片描述
然而,指針和數組并不是完全互換的。例如,請看下面的程序:

#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int  var[MAX] = {10, 100, 200};for (int i = 0; i < MAX; i++){*var = i;    // 這是正確的語法var++;       // 這是不正確的}return 0;
}

把指針運算符 * 應用到 var 上是完全可以的,但修改 var 的值是非法的。這是因為 var 是一個指向數組開頭的常量,不能作為左值。
由于一個數組名對應一個指針常量,只要不改變數組的值,仍然可以用指針形式的表達式。例如,下面是一個有效的語句,把 var[2] 賦值為 500:

*(var + 2) = 500;

上面的語句是有效的,且能成功編譯,因為 var 未改變

在這里插入圖片描述

#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int  var[MAX] = {10, 100, 200};int *ptr[MAX];for (int i = 0; i < MAX; i++){ptr[i] = &var[i]; // 賦值為整數的地址}for (int i = 0; i < MAX; i++){cout << "Value of var[" << i << "] = ";cout << *ptr[i] << endl;}return 0;
}

Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200
在這里插入圖片描述

#include <iostream>using namespace std;int main ()
{int  var;int  *ptr;int  **pptr;var = 3000;// 獲取 var 的地址ptr = &var;// 使用運算符 & 獲取 ptr 的地址pptr = &ptr;// 使用 pptr 獲取值cout << "Value of var :" << var << endl;cout << "Value available at *ptr :" << *ptr << endl;cout << "Value available at **pptr :" << **pptr << endl;return 0;
}

Value of var = 3000
Value available at *ptr = 3000
Value available at **pptr = 3000

在這里插入圖片描述

#include <iostream>
#include <ctime>using namespace std;
void getSeconds(unsigned long *par);int main ()
{unsigned long sec;getSeconds( &sec );// 輸出實際值cout << "Number of seconds :" << sec << endl;return 0;
}void getSeconds(unsigned long *par)
{// 獲取當前的秒數*par = time( NULL );return;
}

在這里插入圖片描述

2.引用

在這里插入圖片描述

#include <iostream>using namespace std;int main ()
{// 聲明簡單的變量int    i;double d;// 聲明引用變量int&    r = i;double& s = d;i = 5;cout << "Value of i : " << i << endl;cout << "Value of i reference : " << r  << endl;d = 11.7;cout << "Value of d : " << d << endl;cout << "Value of d reference : " << s  << endl;return 0;
}

Value of i : 5
Value of i reference : 5
Value of d : 11.7
Value of d reference : 11.7
在這里插入圖片描述
在這里插入圖片描述

#include <iostream>
using namespace std;// 函數聲明
void swap(int& x, int& y);int main ()
{// 局部變量聲明int a = 100;int b = 200;cout << "交換前,a 的值:" << a << endl;cout << "交換前,b 的值:" << b << endl;/* 調用函數來交換值 */swap(a, b);cout << "交換后,a 的值:" << a << endl;cout << "交換后,b 的值:" << b << endl;return 0;
}// 函數定義
void swap(int& x, int& y)
{int temp;temp = x; /* 保存地址 x 的值 */x = y;    /* 把 y 賦值給 x */y = temp; /* 把 x 賦值給 y  */return;
}

交換前,a 的值: 100
交換前,b 的值: 200
交換后,a 的值: 200
交換后,b 的值: 100
在這里插入圖片描述
在這里插入圖片描述


#include <iostream>using namespace std;double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};double& setValues( int i )
{return vals[i];   // 返回第 i 個元素的引用
}// 要調用上面定義函數的主函數
int main ()
{cout << "改變前的值" << endl;for ( int i = 0; i < 5; i++ ){cout << "vals[" << i << "] = ";cout << vals[i] << endl;}setValues(1) = 20.23; // 改變第 2 個元素setValues(3) = 70.8;  // 改變第 4 個元素cout << "改變后的值" << endl;for ( int i = 0; i < 5; i++ ){cout << "vals[" << i << "] = ";cout << vals[i] << endl;}return 0;
}

改變前的值
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
改變后的值
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445466.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

由旅行商問題認識何為狀態壓縮

動態規劃 動態規劃(dynamic programming)是運籌學的一個分支&#xff0c;是求解決策過程(decision process)最優化的數學方法。20世紀50年代初美國數學家R.E.Bellman等人在研究多階段決策過程(multistep decision process)的優化問題時&#xff0c;提出了著名的最優化原理(pri…

c++基礎學習(06)--(時間,輸入輸出,數據結構)

文章目錄目錄1.時間2.輸入輸出數據結構目錄 1.時間 當前日期和時間 下面的實例獲取當前系統的日期和時間&#xff0c;包括本地時間和協調世界時&#xff08;UTC&#xff09;。 #include <iostream> #include <ctime>using namespace std;int main( ) {// 基于當前…

Abstract Self-Balancing Binary Search Tree

二叉搜索樹 二叉查找樹&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff08;又&#xff1a;二叉搜索樹&#xff0c;二叉排序樹&#xff09;它或者是一棵空樹&#xff0c;或者是具有下列性質的二叉樹&#xff1a; 若它的左子樹不空&#xff0c;則左子樹上所有結…

AVL Tree

前言 希望讀者 了解二叉搜索樹 了解左旋右旋基本操作 https://blog.csdn.net/hebtu666/article/details/84992363 直觀感受直接到文章底部&#xff0c;有正確的調整策略動畫&#xff0c;自行操作。 二叉搜索樹 二叉查找樹&#xff08;Binary Search Tree&#xff09;&a…

c++基礎學習(07)--(類)

文章目錄目錄類與對象1.類成員函數2.類訪問修飾符3.構造函數與析構函數4.拷貝構造函數5. 友元函數6.內聯函數7.this指針8.指向類的指針9.類的靜態成員目錄 類與對象 #include <iostream>using namespace std;class Box {public:double length; // 長度double breadth;…

【大總結1】數據結構與傳統算法總結

由于時間和水平有限&#xff0c;肯定有錯誤或者寫得不好的地方 歡迎在文章下評論指出。 涉及語言&#xff1a; py3&#xff1a;注重算法本身的知識 c/c&#xff1a;實現基礎數據結構和算法 java&#xff1a;實現較復雜數據結構 一、概述 c語言知識體系 算法體系參考 課上筆…

c++基礎學習(08)--(繼承、重載、多態、虛函數)

文章目錄目錄1.繼承2.重載3.多態 && 虛函數目錄 1.繼承 #include <iostream>using namespace std;// 基類 class Shape {public:void setWidth(int w){width w;}void setHeight(int h){height h;}protected:int width;int height; };// 派生類 class Rectang…

圖的應用

1. 圖的應用總覽 在數據結構中圖的應用很廣泛&#xff0c;本文主要從以下四個方面介紹&#xff1a; ①最小生成樹&#xff1a;給定一個無向網絡&#xff0c;在該網的所有生成樹中&#xff0c;使得各邊權數之和最小的那棵生成樹稱為該網的最小生成樹&#xff0c;也叫最小代價…

c++基礎學習(09)--(數據抽象、數據封裝、接口)

文章目錄目錄1.數據抽象2.數據封裝3.抽象接口類目錄 1.數據抽象 數據抽象&#xff1a;就是把它當做黑箱子使用&#xff0c;內部實現與外部接口分開 C類實現數據抽象&#xff0c;如sort()函數&#xff0c;ostream的cout對象 #include <iostream> using namespace std…

吃豆人游戲開發

這個文章怎么突然這么多人看啊。請大家多關注我其他文章啊 html&#xff1a; <html> <head> <meta charset"utf8"> <title>html5 pacman吃豆人游戲代碼</title><style>body{background-color: #292929}*{padding:0;margin:0;}.w…

c++基礎學習(10)--(文件、流、異常處理、動態內存、命名空間)

文章目錄目錄1.文件和流2.異常處理3.動態內存4.命名空間目錄 1.文件和流 注意 文件打開方式中的in和out都是相對于內存&#xff08;計算機&#xff09;而言的&#xff0c;計算機讀取文件&#xff0c;是將數據從磁盤中的文件讀入到內存中&#xff0c;所以用的是in #include &…

數據結構和算法(02)---字符串(c++)

文章目錄目錄一.c風格的字符串與操作函數1.c風格字符串2.c風格字符串處理函數二.c中的字符串與操作函數1.c中的string類2.string類的基本操作3.string類的操作匯總目錄 數據結構&#xff1a; 邏輯結構&#xff1a;數組&#xff0c;棧&#xff0c;隊列&#xff0c;字符串&#x…

如何學習數據結構和算法——大佬文章匯總

第一篇 第二篇、 作者&#xff1a;左程云 我分別說一下國內和國外的行情。 國內的話&#xff0c;一般來講&#xff0c;工資高的公司在面試時算法和數據結構題目的比重較大&#xff0c;工資一般的公司比重較小。當然同樣公司的不同崗位&#xff0c;要求也會不同&#xff0c;…

c++基礎學習(13)--(STL、標準庫)

文章目錄目錄1. STL教程2.標準庫3.有用的資源目錄 1. STL教程 #include <iostream> #include <vector> using namespace std;int main() {// 創建一個向量存儲 intvector<int> vec; int i;// 顯示 vec 的原始大小cout << "vector size " &…

哈夫曼實現文件壓縮解壓縮(c語言)

寫一個對文件進行壓縮和解壓縮的程序&#xff0c;功能如下&#xff1a; ① 可以對純英文文檔實現壓縮和解壓&#xff1b; ② 較好的界面程序運行的說明。 介紹哈夫曼&#xff1a; 效率最高的判別樹即為哈夫曼樹 在計算機數據處理中&#xff0c;霍夫曼編碼使用變長編碼表對源…

c++基礎學習(11)--(模板、預處理器、信號處理)

文章目錄目錄1.模板2.預處理器3.信號處理目錄 1.模板 模板是泛型編程的基礎&#xff0c;泛型編程&#xff1a;以一種獨立于任何特定類型的方式 #include <iostream> #include <string>using namespace std;template <typename T> inline T const& Max…

java 面向對象必懂概述

&#xff08;這是大體框架&#xff0c;以后部分知識細寫&#xff09; 1 抽象過程 所有編程語言都提供抽象機制。可以認為&#xff0c;人們能解決的問題的復雜性直接取決于抽象的類型和質量。 類型&#xff1a;指的是所抽象的是什么。 匯編語言是對底層機器語言的輕微抽象…

c++基礎學習(12)--(多線程、Web編程)

文章目錄目錄1.多線程2.web編程目錄 1.多線程 #include <iostream> // 必須的頭文件 #include <pthread.h>using namespace std;#define NUM_THREADS 5// 線程的運行函數 void* say_hello(void* args) {cout << "Hello Runoob&#xff01;" <&…

《Head First設計模式》第九章(1)迭代器模式

迭代器模式 因為這一章涉及到兩個模式&#xff0c;內容有點多&#xff0c;還有一個組合模式留到下一篇寫吧。 有許多種方法可以把對象堆起來成為一個集合&#xff08;collection&#xff09;。你可以把它們放進數組、堆棧、列表或者是散列表&#xff08;Hashtable&#xff09…

Java內存模型常見問題

1.什么是內存模型&#xff1f; 在多核系統中&#xff0c;處理器一般有一層或者多層的緩存&#xff0c;這些的緩存通過加速數據訪問&#xff08;因為數據距離處理器更近&#xff09;和降低共享內存在總線上的通訊&#xff08;因為本地緩存能夠滿足許多內存操作&#xff09;來提高…