首页 > 代码库 > C之指针
C之指针
什么是指针
* 指针变量:用来存储某种数据在内存中的地址.
*
世面上书籍一般把指针和指针变量的概念混在一起了.
市面上的书籍说的指针指的就是指针变量
? *号的三种含义
1. 两个数相乘
int i =5;
int j =
5;
i*j;
2. 基本类型* 表示这种类型的指针变量
- 指向内存中这种类型的变量的地址
int i= 3;
int* p;可以存放i的地址
p=&i
3.
指针变量前加* 表取出这个指针变量里的数据
int* p;
*p
把地址里的数据取出来
指针常见错误
* 野指针:指针变量没有定义指向的地址,该指针就不能赋值(点我就蓝屏)
int* p;//声明一个指针变量用来存放一个地址
//指针变量未经赋值,不可以使用.
//*p 野指针.
printf("*p=%d\n",*p);
*
每种数据类型的地址,必须用当前类型的指针变量表示
double d =
3.14;
int *p ;//指针变量存储int类型数据的地址
//每种数据类型的地址,必须用当前数据类型的指针变量表示.
p = &d;
printf("*p=%lf\n",*p);
? 值传递和引用传递
* 引用传递:如果传递的值是一个内存地址,通过这个地址可以找到地址对应的引用
* 值传递:传递具体的数值
* 在java语言中对象实际上存放在某个内存地址里面,传递对象就相当于传递的是内存地址(引用传递)
? 指针的应用场景
让函数返回一个以上的值
直接访问硬件 (opengl 显卡绘图)
快速传递数据(指针表示地址)
表示复杂的数据结构(结构体)
方便处理字符串
指针有助于理解面向对象
? 指针就是地址,地址就是指针
? 地址就是内存单元的编号
? 指针变量是存放地址的变量
? 指针和指针变量是两个不同的概念
? 但是要注意: 通常我们叙述时会把指针变量简称为指针,实际它们含义并不一样
#include<stdio.h> #include<stdlib.h> main() { int i = 5; //写一个一级指针 int* p = &i; printf("p = %d \n",*p); //二级指针 int** pi = &p; printf("pi =%d \n",*(*pi)); printf("pi =%d \n",**pi); //三级指针 int*** pp = & pi; printf("pp = %d \n",***pp); }
C之指针