首页 > 代码库 > 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之指针