一篇读懂 指针

前言:

指针的定义:一个变量在内存中占用存储空间的起始地址称为该变量的指针。

指针变量:如果一个变量专门来存放其他变量的指针,那么就称这个变量为指针变量。

引入指针的目的:通过指针来访问指向的数据对象。


理解指针具体含义:

1、指针变量和普通变量的区别:指针变量存放的是 一个其他变量的首地址,普通变量存放的是 实际的值。

*:取地址:举例:p是指针变量,p存放的地址是 ox2237,*p就是取到,p所存放地址(ox2237)位置上的值。

该图 *p 取到的值为 10。


提到这,我便思考到 如果一个普通变量 存放的是地址值,如果用 该变量前 加 * ,是否会达到和指针一样的效果

代码:

#include <stdio.h>
void main(){
    int a = 10;
    int b = &a; //6487580  a的地址
    printf("%d", *b);
} 

按照我所思考的逻辑:此时应该输出 10,但是一行醒目的红色出来了

哦吼,原来如此,如果变量要使用 * 的话,前提:该变量声明必须是 指针变量,所以 普通变量无法实现指针变量的功能!


指针的赋值:

  • 指针变量的赋值,也只能赋 变量 的地址值。(注:不允许将常量或者一个非地址表达式来给指针赋值)

int i,*p;
i = 10; // 初始化 i
p = null; //正确
p = 67; //错误
p = i+5; //错误
p = &i; // 正确,&i 是取i变量的地址

指针的算术运算:

  • ++(自增)、--(自减)。指针变量的值增1或减1,指针变量指向相邻的后一个元素或者前一个元素

  • 加、减整型数据。指针加( 或减 )一个整数,结果还是一个指针,是向后(或前)偏移所加(或减)整数个元素的指针。

  • 两个指针相减。两个指针相减的结果是一个整数。

指针相减是有条件的:这俩个指针指向同一个数组中的元素。指针的差值即两个指针相对偏移的元素的个数。

#include <stdio.h>
void main(){
    int a[6]={0,1,2,3,4,5};
    int *p1,*p2;
    p1 = &a[0];
    p2 = &a[5];
    printf("%d",p2-p1); 
} 

输出:


指针的比较运算:

指向同一个数组的俩个指针可以进行关系运算

  • 当 p1,p2指向同一个元素时,p1 ==p2 为真,否则为假

  • 当 p1,p2是指向同一个数组的两个指针变量,p1指向的数组元素在p2指向的元素之前,则表达式 p1<p2 为真,否则为假

在一个不指向任何数组元素的指针上执行算术运算会导致未定义的行为。


在使用指针变量时,要注意以下几点:

1、指针变量可以自增、自减,而数组名不可以自增、自减。

原因:数组名是数组的首地址,它的值在程序运行期间固定不变,是常量。

2、注意指针变量的当前值。

数组循环时,指针依次指向数组中的每个元素。循环结束时,指针变量指向数组以外的单元了。

3、注意防止下标越界


二维数组指针

二维数组指针有两种:① 元素指针。整型元素 xx[i][j] 的指针 &x[i][j] 或者 x[i]+j。② 行指针。

-------

已知 x[i][j]; 可得: x+i 是元素 x[i] 的指针,*(x+i)是 x[i],x[i]+j 是元素 x[i][j] 的指针,所以 *(x+i)+j 是元素 x[i][j] 的指针,*(*(x+i)+j) 就是数组元素 x[i][j]。

切记,行指针前加 * ,是该行 0 元素的指针。


指针数组和数组指针:

指针数组:由指向同一类型数据的指针作为元素组成的数组称为指针数组。一般形式为:

类型  *数组名[数组长度]

数组指针:指向数组的指针。一般形式为:

类型  (*指针名称)[m]

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言指针C语言中非常重要的概念,它是程序设计中最基本的数据结构之一。指针可以用于在程序中访问和操作内存中的数据,它们是C语言中最强大、最灵活的工具之一。在本篇笔记中,我们将介绍C语言指针的基本概念和用法。 1. 指针的概念 指针是一个变量,它存储了一个内存地址。在C语言中,每个变量都有一个内存地址,指针可以用来指向这个地址。通过指针,我们可以访问和操作内存中的数据,这使得C语言非常灵活和强大。 2. 定义指针变量 在C语言中,定义指针变量有两个步骤。第一步是声明指针变量的类型,第二步是用"&"符号取得一个变量的地址,并将这个地址赋给指针变量。例如: ```c int num = 10; //定义一个整型变量num int *p; //声明一个指针变量p p = &num; //将num的地址赋给指针变量p ``` 这样,指针变量p就指向了变量num的地址。 3. 操作指针变量 有了指针变量之后,我们可以通过指针变量访问和操作内存中的数据。例如,要访问变量num的值,可以通过指针变量p来实现: ```c printf("num的值为:%d", *p); //输出num的值 ``` 在这个例子中,通过"*"符号来访问指针所指向的内存中存储的值。这个符号被称为“解引用符号”,它可以用来访问指针所指向的内存中存储的值。 4. 指针的运算 指针可以进行加、减运算,这种运算是基于指针的类型和指针所指向的内存的大小进行的。例如,如果定义了一个指向整型的指针变量p,那么p+1将指向下一个整型变量的地址。同样的,p-1将指向上一个整型变量的地址。 此外,指针还可以用来访问数组中的元素。例如: ```c int arr[5] = {1, 2, 3, 4, 5}; //定义一个整型数组 int *p; //声明一个指针变量 p = arr; //将数组的首地址赋给指针变量 printf("arr[0]的值为:%d", *p); //输出数组第一个元素的值 ``` 在这个例子中,将数组的首地址赋给了指针变量p,然后通过解引用符号来访问数组中的元素。 5. 指针的应用 指针C语言中非常重要的概念,它可以用于很多方面。例如,可以通过指针来动态分配内存空间、访问硬件设备、实现复杂的数据结构等等。 总之,指针C语言中非常重要的概念,程序员需要深入理解它的概念和用法,才能够在程序设计中发挥其强大的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值