07 指针

0、作用:指针指向的是变量所占内存的首地址,可以通过指针间接访问内存。

1、指针变量的使用

  定义语法:数据类型 * 变量名

  指针变量与普通变量的区别:前者存放的是地址,后者存放的是数据。

int main() {

    int a = 10;     int * p;   //定义指针变量
    p = &a;   //对指针变量赋值,指针指向变量a的地址
    cout << &a << endl; //打印数据a的地址
    cout << p << endl;  //打印指针变量p
    cout << "*p = " << *p << endl;  //通过"*"操作符操作指针变量指向的内存,这个操作叫“解引用”
    system("pause");

    return 0;
}

 

 

2、指针所占内存空间:所有类型的指针(无论是char*、int*、doble*)所占内存大小都是一样的。

   在16、32、64位系统中,指针变量分别占2、4、8个byte。

 

3、空指针与野指针

    空指针:指向内存地址编号为0的空间。做初始化之用。

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

  空指针和野指针指向的都不是我们申请的空间,所以不要访问。

 

4、const修饰指针

  三种情况:

  1)const修饰指针得到常量指针  如:const int *p1=&a; or  int const *p=&a;

  2)指针修饰const得到指针常量  如:int * const p2=&a;

  3)const修饰的const指针 得到指向常量的常量指针  如:const int const *p=&a;

  记忆:const在*前就常量指针,const在*后就指针常量。详见随笔辨析。

 

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

int main() 
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int * p = arr; //指向数组的指针 cout << "第一个元素: " << arr[0] << endl; cout << "指针访问第一个元素: " << *p << endl; for (int i = 0; i < 10; i++) { //利用指针遍历数组 cout << *p << endl; p++; } system("pause"); return 0; }

 

 

6、指针与函数

   用法:利用指针作为函数参数,可以修改实参的值。

   如果不想改变实参,用值传递;想改变实参,用地址传递。

//值传递
void swap1(int a ,int b)
{
    int temp = a;
    a = b; 
    b = temp;
}
//地址传递
void swap2(int * p1, int *p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

int main() {

    int a = 10;
    int b = 20;
    swap1(a, b); // 值传递不会改变实参

    swap2(&a, &b); //地址传递会改变实参

    cout << "a = " << a << endl;

    cout << "b = " << b << endl;

    system("pause");

    return 0;
}

 

✔练习案例: 封装一个函数,利用冒泡法,实现对整形数组的升序排序 

例如数组: int arr[10]={1,9,2,8,3,7,4,6,5,0}; 

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void bubblesort(int*a,int szie);
 5 
 6 int main()
 7 {
 8     int arr[10]={1,9,2,8,3,7,4,6,5,0};
 9     bubblesort(arr,sizeof(arr)/sizeof(arr[0]));
10 
11     for(int k=0;k<10;k++)
12     {
13         cout<<arr[k]<<" ";
14     }
15     system("pause");
16     return 0;
17 }
18 
19 void bubblesort(int *a, int size)
20 {
21     for(int i=0;i<size-1;i++)
22     {
23         for(int j=0;j<size-1;j++)
24         {
25             if(*(a+j)>*(a+j+1))
26             {
27                 int temp=*(a+j);
28                 *(a+j)=*(a+j+1);
29                 *(a+j+1)=temp;
30 
31             }
32         }
33     }
34 }
bubble sort 利用函数调用

 

posted @ 2021-06-25 17:36  蓄芳  阅读(61)  评论(0)    收藏  举报