跳到主要内容

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;
}

参考与致谢