江河入海,知识涌动,这是我参与江海计划的第1篇。
前言
指针是C语言的核心部分,学习指针可以使内功更扎实,代码更高效和创新点更多。
说这么多,指针是什么,接下来仔细探索。
代码语言:javascript复制初识指针<一>
一 目录
1. 指针是什么
2. 如何创建指针变量
3. 指针变量的大小
4. 指针类型的意义
5. const修饰指针
6. 指针的运算
7. void*指针
8. 野指针
9. 指针使用和传值调用VS传址调用
10.assert断言1.指针是什么
变量创建的本质是向内存申请空间,空间也就有了地址。
简单地说:指针就是地址
2.如何创建指针变量
2.1首先了解一下操作符
2.1.1 &
&(取地址操作符) 简而言之:取出的是变量的地址
int* p=&a;int* 表示p是一个指针类型,p指向a,p存放的是变量a的地址
2.1.2如何去除地址里面的内容呢,就要使用 *(解引用操作符)
*
*p(对p所指的地址进行解引用)即a=*p
3. 指针变量的大小
指针变量的大小与数据类型无关,而与平台有关。
3.1 64位平台
3.2 32位平台
4.指针类型的意义
指针类型决定了解引用操作时有多大的权限,从开始到最后访问距离(也就是字节)
4.1 int类型
执行完 int n=0x11223344语句玩后n的地址
执行完 *p=0语句玩后n的地址
4.2 char类型
执行完 int n=0x11223344语句玩后n的地址
执行完 *p=0语句玩后n的地址
5.const修饰指针
5.1 const修饰*p
5.2 const修饰p
6.指针运算
6.1 指针+-整数
6.2 指针-指针
6.3 指针关系运算
7 void* 指针
void指针可以接收任意类型的地址,但它无法进行运算
8. 野指针
8.1野指针成因
8.1.1.指针未初始化
代码语言:javascript复制int main()
{
int* p;
*p = 20;
return 0;
}8.1.2指针越界访问
代码语言:javascript复制//指针越界访问
int main()
{
int a[5] = { 1,2,3,4,5 };
printf("%d\n", a[5]);
return 0;
}8.1.3指针指向的空间被释放
9.指针使用和传值调用和传址调用
9.1传值调用
9.2传址调用
10.assert断言
assert.h头文件定义了宏assert(),用于在运行是确保程序符合指定条件,如果不符合,就报错,程序终止运行,这个宏成为“断言”。
10.1程序终止运行例子
10.2程序正常运行
谢谢观看!