C++基础(指针)
C++指针
指针定义语法:数据类型 *指针变量名:
int *p;
解引用:指针前加一个*
,可以找到指针指向内存中的数据
指针所占内存空间
#include <iostream>
using namespace std;
//求指针在内存中所占的空间
int main()
{
int a = 10;
int *p = &a;
cout <<"sizeof int*" << sizeof(int *) <<endl;
cout <<"sizeof char*" << sizeof(char *) <<endl;
cout <<"sizeof float*" << sizeof(float *) <<endl;
cout <<"sizeof double*" << sizeof(double *) <<endl;
cout <<"sizeof string*" << sizeof(string *) <<endl;
}
空指针和野指针
空指针:指针变量指向内存中编号为0的空间
用法:初始化指针变量
注意:空指针指向的内存是不可以访问的
示例:
#include<iostream>
using namespace std;
int main()
{
//1.空指针用于给指针变量进行初始化
int *p = NULL;
//int *q = (int*)0x1100;
//2.空指针是不可以进行访问的,因为0~255为系统占用内存,不允许用户访问
int x = 20;
printf("%c\n",x);
//cout << *q << endl;
return 0;
}
野指针:指针变量指向非法的内存空间
示例:
#include <iostream>
using namespace std;
int main()
{
int *p = (int *)0x1100;
//访问野指针报错
cout << *p << endl;
}
常量指针
特点:指针的指向可以改,但指针指向的值不可以改
const int *p = 10;//常量指针
*p = 20//错误,指针指向的值不可以改
p = &b//正确,指针指向可以改
指针常量
特点:指针的指向不可以改,指针指向的值可以改
int * const p = 20;
*p = 30;//正确
p = &c;//错误
示例:
#include <iostream>
using namespace std;
int main()
{
//const修饰指针和常量
int a = 10;
const int * const p = &a;
*p = 30//错误
p = &b;//错误
}
指针数组
案例:
#include <iostream>
using namespace std;
int main()
{
int a[] = {11,22,33,44,88,99,77};
int *p = a;//a是数组首地址
cout <<"利用指针访问数组第一个元素:" << *p << endl;
p++;//让指针向后偏移4个字节
cout << "利用指针访问数组第二个元素:"<< *p << endl;
cout <<"利用指针遍历数组"<< endl;
int *p2 = a;
for(int i = 0;i < 7;i++)
{
cout << *p2<<" ";
p2++;
}
cout << endl;
}
指针和函数
作用:利用指针做函数参数,可以修改实参的值
ude <iostream>
using namespace std;
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int m = 20;
int n = 10;
swap(&m,&n);
cout <<"m = " << m <<endl;
cout <<"n= " << n <<endl;
}
案例
冒泡排序函数
#include <iostream>
using namespace std;
//冒泡排序函数
void maopaopaixu(int *p, int len)
{
for(int i = 0;i < len -1;i++)
{
for(int j = 0;j < len -i -1;j++)
{
if(p[j] < p[j+1])
{
int temp;
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
}
int main()
{
//定义一个数组
int arr[10];
printf("请输入10个整数\n");
int len = sizeof(arr)/sizeof(arr[0]);
for(int i = 0;i < len;i++)
{
cin >> arr[i];
}
maopaopaixu(arr,len);
//打印
for(int i = 0;i < len;i++)
{
cout << *(arr+i) << " ";
}
cout<<endl;
}
原文地址:https://blog.csdn.net/jxcklfn/article/details/144447972
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!