江河入海,知识涌动,这是我参与江海计划的第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程序正常运行

谢谢观看!