亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一起來了解一下C++中的指針

 更新時(shí)間:2022年02月15日 15:07:40   作者:沒有省略號(hào)  
這篇文章主要為大家詳細(xì)介紹了C++的指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1 指針的基本概念

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

內(nèi)存編號(hào)是從0開始記錄的,一般用十六進(jìn)制數(shù)字表示??梢岳弥羔樧兞勘4娴刂贰?/p>

2 指針變量的定義和使用

指針變量定義語法:

數(shù)據(jù)類型* 變量名;
&可以取地址;*可以取地址存放的值

示例:

#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	//1.指針定義的語法:數(shù)據(jù)類型 * 指針變量名;
	int* p; //int* 定義一個(gè)指向整數(shù)型的指針變量
	p = &a;
	cout << "a的地址是:" << &a << endl;
	cout << "指針p是:" << p << endl;
	
	//2.使用指針,可以通過解引用的方式來找到指針指向的內(nèi)存
	//指針變量前加* 代表解引用,就是找到一個(gè)地址內(nèi)存中存放的數(shù)據(jù)
	*p = 100;
	cout << "a = " << a << endl;
	cout << "*p = " << *p << endl;
	
	system("pause");
	return 0;
}

3 指針?biāo)純?nèi)存空間

指針也是種數(shù)據(jù)類型,所以指針也是占內(nèi)存的

  • 32位操作空間下,占用4個(gè)字節(jié)。
  • 64位操作空間下,占用8個(gè)字節(jié)。
#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	int* p = &a;
	
	cout << "sizeof(int*)=" << sizeof(int*) << endl;
	cout << "sizeof(float*)=" << sizeof(float*) << endl;
	cout << "sizeof(double*)=" << sizeof(double*) << endl; 
	cout << "sizeof(char*)=" << sizeof(char*) << endl;
	cout << "sizeof(string*)=" << sizeof(string*) << endl;
	
	system("pause");
	return 0;
}

可以改變上面的x86(32位)和x64(64位),查看輸出結(jié)果。

在這里插入圖片描述

4 空指針和野指針

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

用途:初始化指針變量

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

示例:

#include<iostream>
using namespace std;
int main()
{
	//1空指針用于給指針變量初始化.
	int* p = NULL;  //就是0

	//空指針是不可以進(jìn)行訪問的
	//0-255之間的內(nèi)存編號(hào)是系統(tǒng)占用的,因此不可以訪問
	*p = 100;
	//因?yàn)檫@里不可以訪問,所以程序直接退出了,后面的代碼不再執(zhí)行。
	cout << p << *p << endl;

	system("pause");
	return 0;
}

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

示例:

#include<iostream>
using namespace std;
int main()
{
	//野指針
	int* p = (int*)0x1100;
	//這里定義的這個(gè)地址就是不屬于我們當(dāng)前地址空間的地址,就是越界了,也無法訪問,所以程序會(huì)自動(dòng)退出。
	cout << *p << endl;

	system("pause");
	return 0;
}

5 const修飾指針

const修飾指針有三種情況:

1.常量指針:指向常量的指針

2.指針常量:指針類型的常量

3.指向常量的指針常量:一個(gè)是本身就是常量的指針指向了一個(gè)常量。

const int* p = &a;  ---常量指針
特點(diǎn):指針的指向可以修改,但是指針指向的值不可以修改。
(幫助理解:從右向左看,const在最后起固定作用,固定了*p的值,但是沒有固定p的指向,即使改變了p的指向,*p也是不可更改的。)

int* const p = &a;  ---常量指針
特點(diǎn):指針的指向不可以修改,但是指針指向的值可以修改。
(幫助理解:從右向左看,const在p獲得地址后起固定作用,固定了p的指向,但是沒有固定*p的值)

const int* const p = &a;
特點(diǎn):指針的指向和指針指向的值都不可以修改。

示例:

#include<iostream>
using namespace std;
int main()
{
	int a = 10, b = 20;

	//常量指針
	const int* p = &a;
	//*p = 10;錯(cuò)誤,指向的值不可修改
	p = &b;  //指向可以修改
	//*p = 30;即使指向改變,指向的值也是不可修改的。
	cout << *p << endl; 

	//指針常量
	int* const p2 = &a;
	//p2 = &b;錯(cuò)誤,指向不可修改
	*p2 = 100;//指向的值可以修改
	cout << *p2 << endl;
	//指向常量的指針常量
	const int* const p3 = &a;
	//p3 = &b;錯(cuò)誤,指向不可修改
	//*p3 = 100;錯(cuò)誤,指向的值不可修改

	system("pause");
	return 0;
}

6 指針和數(shù)組

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

示例:

#include<iostream>
using namespace std;
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	cout << "第一個(gè)元素為:" << arr[0] << endl;
	int* p = arr;//首地址賦予了指針變量p
	cout << p << endl;
	cout << "利用指針訪問第一個(gè)元素:" << *p << endl;	
	p++;//指針+1是加一存儲(chǔ)單位,int型變量占4字節(jié),所以+4
	cout << p << endl;
	cout << "利用指針訪問第二個(gè)元素:" << *p << endl;

	char brr[2] = { 'a','b' };
	char* q = brr;
	cout << (int)q << endl;
	q++;   //字符型變量占1個(gè)字節(jié),所以+1
	cout << (int)q << endl;

	//利用指針遍歷數(shù)組
	p = arr;
	for (int i = 0; i < 10; i++) 
	{
		cout << *p << endl;
		p++;
	}

	system("pause");
	return 0;
}

7 指針和函數(shù)

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

對比值傳遞,值傳遞是為形參另開辟一段內(nèi)存進(jìn)行運(yùn)算;

而指針傳遞則是傳遞地址,通過對地址訪問,就可以直接對實(shí)參做出改變。

#include<iostream>
using namespace std;
void swap01(int a, int b) //值傳遞
{	
	int temp = a;
	a = b;
	b = temp;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}
void swap02(int* p1, int* p2) 
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}
int main()
{
	int a = 10, b = 20;
	swap01(a, b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	swap02(&a, &b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	system("pause");
	return 0;
}

8 指針、數(shù)組、函數(shù)

案例:封裝一個(gè)函數(shù),利用冒泡排序,實(shí)現(xiàn)對整型數(shù)組的升序排序

例如數(shù)組,int arr[10]={4,3,6,9,1,2,10,8,7,5} ;

#include<iostream>
using namespace std;
void coutarr(int* arr,int len) 
{
	for (int i = 0; i < len; i++) 
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}
void bubbleSort(int* arr, int len) //值傳遞
{
	for (int i = 0; i < len; i++) 
	{
		for (int j = 0; j + i < len - 1; j++) 
		{
			if (arr[j] > arr[j+1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
int main()
{
	int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
	int len = sizeof(arr) / sizeof(arr[0]);
	cout << "排序前的數(shù)組為:" << endl;
	coutarr(arr, len);
	bubbleSort(arr, len);
	cout << "排序后的數(shù)組為:" << endl;
	coutarr(arr, len);
	system("pause");
	return 0;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!     

相關(guān)文章

  • C語言基于EasyX實(shí)現(xiàn)貪吃蛇

    C語言基于EasyX實(shí)現(xiàn)貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了C語言基于EasyX實(shí)現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例

    C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例

    這篇文章主要介紹了C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C語言中如何通過指針參數(shù)返回值

    C語言中如何通過指針參數(shù)返回值

    這篇文章主要介紹了C語言中如何通過指針參數(shù)返回值問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 利用C語言實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼

    利用C語言實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用純C語言實(shí)現(xiàn)任務(wù)調(diào)度(可用于STM32、C51等單片機(jī)),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • C++實(shí)現(xiàn)推箱子游戲

    C++實(shí)現(xiàn)推箱子游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言函數(shù)的基本使用和遞歸詳解

    C語言函數(shù)的基本使用和遞歸詳解

    一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層
    2021-09-09
  • C++可變參數(shù)模板深入深剖

    C++可變參數(shù)模板深入深剖

    個(gè)可變參數(shù)模板(variadic template)就是一個(gè)接受可變數(shù)目參數(shù)的函數(shù)模板或類模板,下面這篇文章主要給大家介紹了關(guān)于C++可變參數(shù)模板的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • C++ map詳解

    C++ map詳解

    下面小編就為大家?guī)硪黄獪\談c++中的map。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-10-10
  • 一起來看看C語言的預(yù)處理注意點(diǎn)

    一起來看看C語言的預(yù)處理注意點(diǎn)

    這篇文章主要為大家詳細(xì)介紹了C語言的預(yù)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 關(guān)于C++中的友元函數(shù)的一些總結(jié)

    關(guān)于C++中的友元函數(shù)的一些總結(jié)

    以下是對C++中的友元函數(shù)進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下
    2013-09-09

最新評論