资讯详情

13C++之指针基础,数组与函数关系

文章目录

    • 6 指针
      • 6.1 指针的基本概念
      • 6.2 定义和使用指针变量
      • 6 .3 指针占用内存空间
      • 6.4 空指针和野指针
      • 6.5 const 修饰的指针
      • 6.6 指针和数组
      • 6.7 指针和函数
      • 6.8 指针、数组、函数
    • 感谢您的赞扬、评论和转发 \( ^ o ^)/~。

6 指针

6.1 指针的基本概念

:内存可以通过指针间访问。

  1. 内存编号从0开始记录,通常用16进制数字表示。
  2. 地址可以用指针变量保存。

6.2 指针变量的定义和使用

: 数据类型 * 指针变量名;

#include<iostream> using namespace std;  int main() { 
          //1.定义指针  int a = 32;  int* p;   ///让指针记录变量a的地址  p = &a;  cout << "a变量地址为:" << &a << endl;  cout << "p = " << p << endl;  /*2,使用指针 指针指向的内存指针指向的内存 指针前加 * 在指针指向的内存中找到数据代表解引用 */  cout << "*p = " << *p << endl;  ///指针解引用  *p = 100;  cout << "间接修改后a = " << a << endl;  cout << "间接修改指针地址 p = " <<p<< endl;  cout << "间接修改指针后的指针 *p = " <<*p<< endl;  system("pause");  return 0; } 

结果:

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-wVbZmYmV-1647678543784)(C:/Users/dfghkl/AppData/Roaming/Typora/typora-user-images/image-20220319135050400.png)]

6 .3 指针占用内存空间

问题:指针也是一种数据类型,那么这种数据类型占用了多少内存空间呢?

例如:int 在32位操作系统下,类型指针占4个字节,在64位系统下占8个字节。

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-kSRvJ74l-1647678543789)(C:/Users/dfghkl/AppData/Roaming/Typora/typora-user-images/image-20220319135547897.png)]

#include<iostream> 
       
        using 
        namespace std
        ; 
        int 
        main42
        (
        ) 
        { 
          
        //1.定义指针 
        int a 
        = 
        32
        ; 
        int
        * p
        ; 
        //让指针记录变量a的地址 p 
        = 
        &a
        ; cout 
        << 
        "a变量的地址为:" 
        << 
        &a 
        << endl
        ; cout 
        << 
        "p = " 
        << p 
        << endl
        ; 
        /*2,使用指针 通过解引用的方式来找到指针指向的内存 指针前加 * 代表解引用,找到指针指向的内存中的数据 */ cout 
        << 
        "*p = " 
        << 
        *p 
        << endl
        ; 
        //指针的解引用 
        *p 
        = 
        100
        ; cout 
        << 
        "通过间接修改后a = " 
        << a 
        << endl
        ; cout 
        << 
        "通过指针间接修改后的指针地址 p = " 
        <<p
        << endl
        ; cout 
        << 
        "通过指针间接修改后的指针 *p = " 
        <<
        *p
        << endl
        ; 
        system
        (
        "pause"
        )
        ; 
        return 
        0
        ; 
        } 
       

6.4 空指针和野指针

:指针变量指向内存中编号为0的空间。

:初始化指针变量。

:空指针指向的内存是不可以访问的。

#include<iostream>
using namespace std;
int main()
{ 
        
	//空指针
	//1.空指针用于指针变量进行初始化
	int* p = NULL;

	//2.空指针是不可以进行访问的
	//0~255之间的内存编号是系统占用的,因此不可以访问
	*p = 100;


	system("pause");
	return 0;
}

:指针变量指向非法的内存空间

#include<iostream>
using namespace std;
int main()
{ 
        
	//野指针
	//指针变量p指向内存地址编号为0x1100的空间
	int* p = (int *)0x1100;
	cout << *p << endl;
	system("pause");
	return 0;
}

:在编程过程中要避免出现野指针和空指针,它们是挺危险的

6.5 const 修饰的指针

const修饰指针有三种情况:

  1. const修饰指针…常量指针(指针指向的值不可以改,指针的指向可以改)
  2. const修饰常量…指针常量(指针指向的值可以改,指针的指向不可以改)
  3. const即修饰指针,又修饰常量 (指针的指向和指针所指向的值 都不可以改)
#include<iostream>
using namespace std;
int main()
{ 
        
	//1.const修饰指针 常量指针
	int a = 10, b = 20;
	const int* p = &a;	//指针*p指向a
	//指针指向的值不可以改,指针的指向可以改
	//*p = 20;错误
	p = &b;	//指针的指向可以修改,正确

	//2.const修饰常量 指针常量
	//指针指向的值可以改,指针的指向不可以改
	int* const p2 = &a;
	*p2 = 34;//正确
	//p2 = &b;//错误,指针的指向不可以修改

	//3.const修饰指针和常量
	const int* const	p3 = &a;
	//指针的指向和指针所指向的值 都不可以改
	//*p3 = 100; 错误
	//p3 = &b; 错误

	system("pause");
	return 0;
}

6.6 指针和数组

:利用指针访问数组中元素

#include<iostream>
using namespace std;
int main()
{ 
        
	/* 指针和数组 利用指针访问数组中的元素 */
	int arr[] = { 
         1,2,3,4,5,6,7,8,9,10 };
	//cout << "第一个元素为:" << arr[0] << endl;
	cout << "第一个元素为:" << *arr << endl;

	int* p = arr;				//arr就是数组首地址 
	cout << "* p =" << *p << endl;
	p++;							//因为*p是四节的指针,自增1后指向下一个元素
	
	cout << "利用指针遍历数组:" << endl;
	int* p2 = arr;
	for (int  i = 0; i < 10; i++)
	{ 
        
		cout << "arr ["<<i<<"] = " << *p2 << endl;
		p2++;	//通过指针自增指向下一个元素
	}
	system("pause");
	return 0;
}

6.7 指针和函数

:利用指针做函数参数,可以修改实参的值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aL57eTV3-1647678543799)(C:/Users/dfghkl/AppData/Roaming/Typora/typora-user-images/image-20220319154420716.png)]

#include<iostream>
using namespace std;
//值传递
void  swap1(int a, int b)
{ 
        
	int temp;
	temp = a;
	a = b;
	b = temp;
	cout << "swap1中a = " << a << endl;
	cout << "swap1中b = " << b << endl;
}
//地址传递
void swap2(int* p1, int* p2)
{ 
        
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;

}
int main()
{ 
        
	int a = 10, b = 20;
	//值传递函数调用不会改变实参
	swap1(a, b);

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	//地址传递函数调用会改变实参
	swap2(&a, &b);

	cout << "地址调用后 a = " << a << endl;
	cout << "地址调用后 b = " << b << endl;



	system("pause");
	return 0;
}

6.8 指针、数组、函数

:封装一个函数,利用冒泡排序,实现整形数组的排序,例如:int arr[10] = {4,3,6,9,1,2,10,8,7,5};

#include<iostream>
using namespace std;
//2.创建冒泡排序函数 参数1是数组的首地址 参数2是数组长度
void bubbleSort(int* arr, int len)		//也可以写为int arr[]
{ 
        
	for (int  i = 0; i < len; i++)
	{ 
        
		for (int j =0; j < len - 1 - i; j++)
		{ 
        
			int temp = 0;

			if (arr[j] > arr[j+1])
			{ 
        
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

// 3.打印数组输出
void  printArr(int arr[], int len)
{ 
        
	for (int i = 0; i < len; i++)
	{ 
        
		cout << "arr [" << i << " ] =" << arr[i] << endl;

	}
}
int main()
 { 
        
	//1.先创建数组
	int  arr[10] = { 
         4,3,6,9,1,2,10,8,7,5 };
	int len = sizeof(arr) / sizeof(arr[0]);
	//2.创建冒泡排序函数

	//3.调用冒泡排序函数
	bubbleSort(arr, len);

	//4.打印排序后的数组输出
	printArr(arr,len);
	system("pause");
	return 0;
}

谢谢你的点赞,评论和转发 ( ^ o ^)/~。

标签: 横沥板对板连接器bk13c06夷陵板对板连接器bk13c06

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司