快速做彩平图得网站,宝塔做的网站怎么就可以进去了,如何用自己的域名做网站,软件培训方案一.指针的定义 在C中#xff0c;指针是一种特殊的变量#xff0c;它存储另一个变量的内存地址。简单的说#xff0c;指针是指向另一个数据类型的“指针”或“引用”#xff0c;我们可以通过指针来间接操作其他变量的值。 指针的基本语法#xff1a; 数据类型 *指针变量名 …一.指针的定义 在C中指针是一种特殊的变量它存储另一个变量的内存地址。简单的说指针是指向另一个数据类型的“指针”或“引用”我们可以通过指针来间接操作其他变量的值。 指针的基本语法 数据类型 *指针变量名 简单的使用方法
#include iostream
using namespace std;int main() {// 1. 定义一个要指向的变量int a 10;// 2. 定义一个指针的空间int *p;// 3. 让指针记录变量a的地址p a;// 输出a的地址和指针p的值即a的地址cout a的地址为 a endl;cout 指针p为 p endl;// 4. 使用指针// 通过解引用指针p指向的内存可以被修改*p 1000;// 输出修改后的值cout a a endl;cout *p *p endl;return 0;
}输出结果
a的地址为 0x7ffedc3a4c4c // 这里的地址会因运行环境不同而不同
指针p为 0x7ffedc3a4c4c // p 存储的是 a 的地址
a 1000
*p 1000二.空指针和野指针 在C里空指针是一种特殊的指针表示它不指向任何有效的对象或函数。我们可以这样理解就是说当我们定义一个指针这个时候该指针是没有赋值的此时这个指针叫野指针因为野指针的值是不确定的当指针出现在这样的情况的时候就会有一定概率导致程序的崩溃所以往往指针创建的开始我们要给指针一个空值使它成为空指针从而避免野指针带来的潜在崩溃风险。
int* ptr nullptr; // 现代 C 推荐使用 nullptr三.const和指针 const在C中来修饰指针时有多种用法具体取决于你将const放在指针声明的那个位置。
1.const修饰指针本身
表示指针不能指向其他地址既指针的地址常量。
int a 10;
int b 20;
int* const ptr a; // ptr 是常量指针指向的地址不能改变*ptr 30; // 允许修改 ptr 指向的内容
// ptr b; // 错误不能改变 ptr 的指向2.const修饰指针所指向的内容
表示指针所指向的值是常量不能修改该值。
int a 10;
const int* ptr a; // ptr 是指向常量的指针不能通过它修改 a 的值// *ptr 20; // 错误不能修改 *ptr 指向的值
ptr b; // 可以改变 ptr 的指向3.const同时修饰指针本身和指向的内容
表示指针既不能修改指向的内容也不能修改指向的地址。
int a 10;
int b 20;
const int* const ptr a; // ptr 是常量指针且指向的内容是常量// *ptr 30; // 错误不能修改 *ptr 指向的内容
// ptr b; // 错误不能改变 ptr 的指向4.总结
修饰位置含义示例说明const int* ptr指针指向的内容是常量指针本身可以改变const int* ptr a;不允许修改指向的内容但指针可以指向其他地址。int* const ptr指针本身是常量内容可以改变int* const ptr a;不允许修改指针的地址但可以修改内容。const int* const ptr指针和内容都是常量const int* const ptr a;不允许修改指针的地址或内容。
四.指针和数组
作用利用指针访问数组中的元素。
#include iostream
using namespace std;int main() {int arr[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};cout 第一个元素为 arr[0] endl;int* p arr; // arr就是数组首地址cout 利用指针访问第一个元素 *p endl;p; // 让指针向后偏移4个字节cout 利用指针访问第二个元素: *p endl;return 0;
}五.指针和函数
作用利用指针作函数参数可以修改实参的值。 我们这里做个值交换的代码来进行演示说明。第一段代码是直接进行赋值传递而第二段代码是利用指针进行地址传递。 在看地址传递前先看这个文章方便理解 C指针和解引用行为-CSDN博客 值传递
#include iostream
using namespace std;void swap01(int a, int b)
{int temp a;a b;b temp;cout swap01 a a endl;cout swap01 b b endl;
}int main() {int a 10;int b 20;swap01(a, b); // 调用交换函数cout a a endl; // 输出main中的acout b b endl; // 输出main中的b
}
输出结果
swap01 a 20
swap01 b 10
a 20
b 10地址传递: 在这里我们可以看到swap02(a,b);这里分别传入的是a的地址和b的地址地址传入到*p1和*p2里面。
#include iostream
using namespace std;void swap02(int *p1, int *p2)
{int temp *p1;*p1 *p2;*p2 temp;}int main() {int a 10;int b 20;//如果是地址传递可以修饰实参swap02(a,b);//相当于将地址传入到上面的函数体cout a a endl; // 输出main中的acout b b endl; // 输出main中的b
}
输出结果
a 20
b 10