7,指针
7.2指针的定义与使用
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int * p;
p = &a;
cout<<"a的地址为:"<<&a<<endl;
cout<<"指针p为"<<p<<endl;
//可以通过解引用的方式来找到指针指向的内存
//指针前加*号代表解引用
*p = 1000;
cout<<"a="<<a<<endl;
cout<<"*p="<<*p<<endl;
}
7.3指针所占内存空间
int main()
{
int a = 10;
int *p = &a;
//在32位操作系统,指针占4个字节空间大小
//在64位操作系统,指针占8个字节空间大小
cout<<"sizeof(int*) = "<<sizeof(int*)<<endl;
cout<<"sizeof(float*) = "<<sizeof(float*)<<endl;
cout<<"sizeof(double*) = "<<sizeof(double*)<<endl;
cout<<"sizeof(char*) = "<<sizeof(char*)<<endl;
system("pause");
return 0;
}
7.4空指针和野指针
int main()
{
int *p = NULL;//空指针不能进行访问,作用:初始化指针变量
*p = 100;
system("pause");
return 0;
}
int main()
{
//在程序中,尽量避免出现野指针
int *p = (int *)0x1100;
cout<<*p<<endl;
system("pause");
return 0;
}
7.5const修饰指针
const int *p = &a;常量指针 特点:指针的指向可以修改,但是指针指向的值不可以改
*p = 20;错误:指针的指向的值不可以修改 p = &b;正确:指针的指向可以改
int * const p = &a;指针常量的指向不可以改,指针指向的值可以改
p = &b;错误:指针指向不可以改
*p = 20;正确:指针的值可以改
const int * const p = &a;特点:指针的指向和指针指向的值不可以改
*p = 20;错误
p = &b;错误
7.6指针和数组
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
cout<<"第一个元素为:"<<arr[0]<<endl;
int *p = arr;
cout<<"利用指针访问第一个元素"<<*p<<endl;
p++;//让指针偏移四个字节
cout<<"利用指针访问第二个元素"<<*p<<endl;
cout<<"利用指针遍历数组"<<endl;
int *p2 =arr;
for (int i = 0;i<10; i++)
{
cout<<*p2<<endl;
p2++;//=cout<<arr[i]<<endl;
}
system("pause");
return 0;
}
7.7指针和函数
void swap(int *p1, int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
int a = 10;
int b = 20;
swap(&a,&b);
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
system("pause");
return 0;
}
7.8指针,数组,函数
void bubbleSort(int *arr,int len)
{
for(int i;i<len-1;i++)
{
for(int j = 0;j<len - i -1;j++)
{
if(arr[j]>arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
void printArray(int * arr,int len)
{
for(int i = 0;i<len;i++)
{
cout<<arr[i]<<endl;
}
}
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int len =sizeof(arr) / sizeof(arr[0]0);
bubbleSort(arr,len);
printArray(arr,len);
system("pause");
return 0;
}