C++指针入门:从基础到实战
·
1.1指针的基本概念
指针的作用:通过指针简介访问内存
- 内存编号一般从0开始,一般用十六进制表示
- 可以利用指针变量保存地址
指针变量定义语法:数据类型 *变量名;
示例:
#include<iostream>
using namespace std;
int main() {
int a = 10;
//定义指针,让指针p指向a的地址
int* p = &a;//&符号为取址符号
cout << "p的值为" << p << endl;
cout << "a的地址为:" << &a << endl;
//使用指针
//用解引用的方式来找到指针指向的内存
*p=1000;//指针前加 * 代表解引用,找到指针指向的内存地址中的数据
//通过*p修改指针指向的内存中的数据
cout << "a=" << a << endl;
cout << "*p=" << *p << endl;
return 0;
}
代码运行逻辑:

1.2指针占用的内存空间
- 指针也是一种数据类型,所以指针占用的内存大小也可以使用sizeof( )访问.
- 32位操作系统下,任何类型的指针都占4字节
#include<iostream>
using namespace std;
int main() {
int a = 10;
int* p = &a;
cout << *p << endl;
cout << "sizeof(int*)=" << sizeof(p) << endl;//sizeof(int*)和sizeof(p)是一样的
cout << "sizeof(int*)=" << sizeof(double*) << endl;
cout << "sizeof(int*)=" << sizeof(char*) << endl;
cout << "sizeof(int*)=" << sizeof(float*) << endl;
return 0;
}
1.3空指针和野指针
- 空指针和野指针都不是我们申请的,所以不要随意访问
#include<iostream>
using namespace std;
int main() {
//空指针,用来给指针变量进行初始化
int* p = NULL;
//空指针不可以访问
//0~255为系统占用内存,不可以访问
//野指针指向非法的内存空间
return 0;
}
1.4const修饰指针
1.4.1const修饰指针-常量指针
常量指针 const int*p=&a
指针的指向可以改变,指针指向的值不可以改变
1.4.2const修饰常量——指针常量
指针常量int*const p=&a
指针的指向不可以改,指着指向的值可以改。
1.4.3const既修饰指针,又修饰常量
const int * const p=&a;
指针的指向和指针指向的值都不可以改变
1.5指针和数组
- 利用指针访问数组需要先得到数组的首地址:int*p=arr;
#include<iostream>
using namespace std;
int main() {
int arr[5] = { 3,4,5,6,7 };
cout << "数组中第一个元素的值:" << arr[0] << endl;
//利用指针访问第一个元素
int* p = arr;
for (int i = 0; i < 5; i++) {
cout << "数组中第"<<i+1<<"个元素的值:" << *p << endl;
cout << "数组中第" << i + 1 << "个元素的地址:" << p << endl;
p++;//指针向后偏移4个字节
}
return 0;
}
1.6指针和函数
- 利用指针作为函数参数,可以修改实参的值。
#include<iostream>
using namespace std;
//值传递
void swap(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 n= 20, m = 30;
cout << "传递前n=" << n<< endl;
cout << "传递前m=" << m << endl;
swap(n, m);
cout << "值传递后n=" << n << endl;
cout << "值传递后m=" << m << endl;
swap2(&n, &m);
cout << "地址传递后*p1=" << n << endl;
cout << "地址传递后*p2=" << m<< endl;
return 0;
}



1.7指针配合数组和函数的案例

#include<iostream>
using namespace std;
void supp(int arr[],int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[10] = { 4,3,6,9,1,2,7,8,10,5 };
int len = sizeof(arr) / sizeof(arr[0]);
supp(arr, len);
for (int i = 0; i < len; i++) {
cout << arr[i] << endl;
}
return 0;
}
更多推荐


所有评论(0)