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 }
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号