欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++中的指針最全總結(jié)

 更新時間:2024年04月27日 09:05:02   作者:月星過億  
指針是整個C++的精髓所在,只有精通了指針才可以說是掌握了C++,可以說學(xué)習(xí)C++的過程是個熟練掌握和使用指針的過程,下面這篇文章主要給大家介紹了關(guān)于c++中指針的相關(guān)資料,需要的朋友可以參考下

一、指針的基本概念

指針的作用:可以通過指針間接訪問內(nèi)存

  • 內(nèi)存編號是從0開始記錄的,一般采用16進(jìn)制數(shù)字表示。
  • 可以利用指針變量保存地址。

二、指針變量的定義和使用

指針變量定義語法: 數(shù)據(jù)類型  * 變量名

#include<iostream>
using namespace std;
int main()
{
	//1.定義一個指針
	int a = 10;
	//指針定義的語法: 數(shù)據(jù)類型 * 指針變量名 ;
	int* p;
	//讓指針記錄變量a的地址
	p = &a;
	cout << "a的地址是:" << &a << endl;
	cout << "指針p指向的地址是:" << p << endl;

	//2.如何使用指針

	//可以通過解引用的方式來找到指針指向的內(nèi)存
	//指針恰加 * 代表解引用,找到指針指向的內(nèi)存中的數(shù)據(jù)
	*p = 1000;//將指針指向的內(nèi)存中的數(shù)據(jù)修改為1000
	cout << "a的值是:" << a << endl;
	cout << "指針p指向的地址中的值是:" << *p << endl;
	system("pause");
	return 0;

}

三、指針?biāo)嫉膬?nèi)存空間

提問:指針也是種數(shù)據(jù)類型,那么這種數(shù)據(jù)類型占用多少內(nèi)存空間?

#include<iostream>
using namespace std;
int main()
{
	// 指針?biāo)嫉膬?nèi)存空間
	int a = 10;
	//int* p;
	//p = &a;
	int* p = &a;
	//在32位操作系統(tǒng)下,指針是占用4個字節(jié)空間大小,不管是什么數(shù)據(jù)類型
	//在64位操作系統(tǒng)下,指針是占用8個字節(jié)空間大小,不管是什么數(shù)據(jù)類型
	cout<<"sizeof(int *)="<<sizeof(p)<<endl;
	cout << "sizeof(int *)=" << sizeof(int *) << endl;
	cout << "sizeof(int *)=" << sizeof(float *) << endl;
	cout << "sizeof(int *)=" << sizeof(double *) << endl;
	cout << "sizeof(int *)=" << sizeof(char *) << endl;
	system("pause");
	return 0;
}

四、空指針和野指針

空指針:指針變量指向內(nèi)存編號為0的空間

用途:初始化指針變量

注意:空指針指向的內(nèi)存是不可以訪問的

4.1 空指針

#include<iostream>
using namespace std;
int main()
{
	//空指針
	//1.空指針用于給指針變量進(jìn)行初始化
	int* p = NULL;
	//2.空指針是不能進(jìn)行訪問的
	//0~255之間的內(nèi)存編號是系統(tǒng)占用的,因此不可以訪問
	*p=100; //error: dereferencing pointer to incomplete type 'int'


	system("pause");
	return 0;


}

 4.2 野指針

野指針:指針變量指向非法的內(nèi)存空間

注意:空指針野指針都不是我們申請的空間,因此不需要訪問。

#include<iostream>
using namespace std;
int main()
{
	//野指針
	//在程序中,盡量避免出現(xiàn)野指針
	int *p =(int*)0x1100;

	cout<<*p<<endl; //輸出地址為0x1100處的值,此處為0,所以會出現(xiàn)野指針錯誤
	system("pause");
	return 0;

}

五、const修飾指針

const修飾指針有三種情況:

  • const修飾指針 ----常量指針
  • const修飾常量 ---指針常量
  • const即修飾指針,又修飾常量

#include <iostream>
using namespace std;

int main()
{
	//1.const修飾指針
	int a = 10;
	int b = 10;
	const int* p = &a; //指向常量的指針
	//*p = 20; //錯誤,不能修改常量指針指向的值
	p = &b; //正確,可以修改指針指向的值
	//2.const修飾常量
	int * const p2 = &a; //指針指向常量,不能修改指針指向的方向,指針指向的值可以改
	*p2 = 20; //正確,可以修改指針指向的值
	//p2 = &b; //錯誤,不能修改指針指向的方向

	//3.const修飾指針和常量
	//指針指向和指針指向的值都不能修改,只能讀取
	const int * const p3=&a;
	//*p3 = 20; //錯誤,不能修改指針指向的值
	//p3 = &b; //錯誤,不能修改指針指向的方向
	system("pause");
	return 0;
}

六、指針和數(shù)組

作用:利用指針訪問數(shù)組中元素

#include <iostream>
using namespace std;

int main() {
	//指針和數(shù)組
	//利用指針訪問數(shù)組中的元素
	int arr[10]= {1,2,3,4,5,6,7,8,9,10};
	cout<<"數(shù)組中的第一個元素:"<<arr[0]<<endl;
	int* p = arr;//arr就是數(shù)組的首地址
	cout<<"數(shù)組中的第一個元素的地址:"<<*p<<endl;
	p++;//指向數(shù)組的第二個元素
	cout<<"數(shù)組中的第二個元素的地址:"<<*p<<endl;
	p--;//指向數(shù)組的第一個元素
	cout << "利用指針遍歷數(shù)組" << endl;
	for (int i = 0; i < 10; i++) {
		cout << *(p + i) << " ";
	}
	cout << endl;

	system("pause");
	return 0;
}

七、指針和函數(shù)

作用:利用指針做函數(shù)參數(shù),可以修改實參的值

#include<iostream>
using namespace std;
//實現(xiàn)兩個數(shù)字進(jìn)行交換
void swap01(int a, int b) {
	int temp = a;
	a = b;	
	b = temp;
	cout << "a=" << a << " b=" << b << endl;
}
void swap02(int* a, int* b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}

int main() {
	//指針和函數(shù)
	//1.值傳遞
	int a = 10;
	int b = 20;
	swap01(a, b);
	cout << "a=" << a << " b=" << b << endl; //輸出結(jié)果為 a=20 b=10
	//2.地址傳遞
	//實參的值會發(fā)生改變
	swap02(&a, &b);
	cout << "a=" << a << " b=" << b << endl; //輸出結(jié)果為 a=20 b=10


	system("pause");
	return 0;
}

八、指針、數(shù)組、函數(shù)(案例)

#include<iostream>
using namespace std;
//冒泡排序函數(shù)
void bubbleSort(int* arr, int len) {
	{
		for (int i = 0; i < len - 1; i++) {
			for (int j = 0; j < len - 1 - i; j++) {
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}
}
int main()
{
	//1.先常見一個數(shù)組
	int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
	//2.創(chuàng)建函數(shù),實現(xiàn)冒泡排序
	int len = sizeof(arr) / sizeof(arr[0]);

	//3.調(diào)用函數(shù),對數(shù)組進(jìn)行排序
	bubbleSort(arr, len);
	cout << "排序后的數(shù)組為:";
	for (int i = 0; i < len; i++) {
		cout << arr[i] << " ";
	}
	cout << endl;	

system("pause");
return 0;
}

總結(jié)

到此這篇關(guān)于c++中指針的文章就介紹到這了,更多相關(guān)c++中指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)

    C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言數(shù)組全面詳細(xì)講解

    C語言數(shù)組全面詳細(xì)講解

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計算機(jī)內(nèi)存里連續(xù)存放,地址編號最低的存儲單元存放數(shù)組的起始元素,地址編號最高的存儲單元存放數(shù)組的最后一個元素
    2022-05-05
  • 常用Hash算法(C語言的簡單實現(xiàn))

    常用Hash算法(C語言的簡單實現(xiàn))

    下面小編就為大家?guī)硪黄S肏ash算法(C語言的簡單實現(xiàn))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • c++多線程為何要使用條件變量詳解

    c++多線程為何要使用條件變量詳解

    多線程是多任務(wù)處理的一種特殊形式,下面這篇文章主要給大家介紹了關(guān)于c++多線程為何要使用條件變量的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C語言鏈表實現(xiàn)銷售管理系統(tǒng)

    C語言鏈表實現(xiàn)銷售管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表實現(xiàn)銷售管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • ON_COMMAND_RANGE多個按鈕響應(yīng)一個函數(shù)的解決方法

    ON_COMMAND_RANGE多個按鈕響應(yīng)一個函數(shù)的解決方法

    這篇文章主要介紹了ON_COMMAND_RANGE多個按鈕響應(yīng)一個函數(shù)的解決方法,需要的朋友可以參考下
    2014-07-07
  • C語言深入了解函數(shù)

    C語言深入了解函數(shù)

    C語言函數(shù)是用來模塊化構(gòu)建程序的。如果你的功能少,你可以全都寫在mian函數(shù)中,但是當(dāng)實現(xiàn)功能多的時候,如果全寫在main的函數(shù)里,不僅代碼不美觀,而且函數(shù)實現(xiàn)的時候結(jié)構(gòu)復(fù)雜,代碼重復(fù)
    2022-05-05
  • 淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別

    淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別

    這篇文章主要介紹了淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C++類的自動轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實現(xiàn)示例

    C++類的自動轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實現(xiàn)示例

    類的自動轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換是面向?qū)ο缶幊讨刑幚眍愋椭g轉(zhuǎn)換的兩種重要機(jī)制,本文就來介紹一下這兩種方法的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • C++中線程池ThreadPool源碼解析

    C++中線程池ThreadPool源碼解析

    線程池(threadpool)作為五大池之一(內(nèi)存池、連接池、線程池、進(jìn)程池、協(xié)程池),線程池的應(yīng)用非常廣泛,不管事客戶端程序還是后臺服務(wù)端,都是提高業(yè)務(wù)處理能力的必備模塊
    2022-09-09

最新評論