c语言笔记--指针

int *p;

p是变量的名字,int * 表示p变量存放int类型变量的地址

指针:

表示一些复杂的数据结构

快速的传递数据

使函数返回一个以上的值

能够直接访问硬件

能够方便的处理字符串

是理解面向对象语言中引用的基础

指针的定义:

地址

内存单元的编号     从0开始的非负整数    范围:0--4G-1

指针

指针就是地址,地址就是指针

指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量

但是要注意:通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。

指针的本质就是一个操作受限的非负整数

指针的分类:

1.基本类型指针

int *p;//p是变量的名字,int * 表示p变量存放int类型变量的地址

int i = 3;   int = j;

p = &i;

j = *p;

使用指针互换两个数

2.指针和数组的关系

指针和一维数组

   一维数组名

         一维数组名是个指针常量,一维数组名无法被改变,因为是常量

         它存放的是一维数组第一个元素的地址,即a=&a[0]

   

二 数组和指针的关系

  ①既然p是指向数组第一个元素起始地址的指针,可以用*(p+i)表示数组中第i+1个元素,a也是指向数组第一个元素的指针啊,那么能不能用*(a+i)表示第i+1个元素呢?

  可以的,可以用printf 打印 *(a+i)的值验证

  ②反过来,a是指向数组第一个元素起始地址的指针,可以用a加数组下标引用数组元素,如a[3],p也是指向数组第一个元素起始地址的指针,能不能用p加数组下标引用数组元素?

  也是可以的,可以用printf 打印 p[0], p[1]....的值验证

PS: 由上得,数组名a和指针p是一样的。实际上编译时,数组元素a[i] 就是当作 *(a+i)去处理的,先通过数组名a找到数组的首地址,然后首地址 a+i 得到元素a[i]的地址,

  再然后通过*(a+i)得到第i个元素的内容。

  所以:数组的第i个元素直接写成*(a+i)的形式直接取得值,效率不就提升了吗。省去编译器先通过数组名a找到数组的首地址,然后首地址 a+i 得到元素a[i]的地址,

  再然后通过*(a+i)得到第i个元素的内容。

3.指针和函数的关系

4.指针和结构体的关系

5.多级指针

int i ;

int *p;p存放int类型的地址       p = &i; *p = i;

int **q;q存放int* 类型的地址      q = &p;*q = p; **q = i;

int ***r; r存放int **类型的地址; r = &q; *r = q; **r = p; ***r = i;

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值