c语言指针详解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

要说明的几点注意事项:

  • 指针的运算*p++与(*p)++是不一样的,运算符从右向左结合,所以,*p++是指针地址加1后取值,而(*p)++是先取指针p的值,然后值加1。
  • 指针与一维数组,int a[3];int *p,既可以使用p=a也可以使用p = &a[0],两个是等价的,即a=&a[0]。
  • 指针的类型。指针分为两部分,一个是其指向类型,另一个是其自身类型,如何判断一个指针的指向类型和其自身类型呐,举个例子:int *p = NULL;我定义了一个指针p,
判断是自身类型:
把指针变量遮住剩下的部分便是自身类型。上例中把p遮住剩下的int*便是其自身类型;
判断指针指向类型:
把指针变量和离其最近的*遮住后剩下的便是其指向类型,上例中int便是其指向类型。
  • 指向常量的指针与常量指针的区别。首先两种指针的定义方式不一样,指向常量的指针定义:const int *p,常量指针定义:int *const p;这两个指针前一个指向const int类型,后一个指向int类型;其二,指向常量的指针不能改变直接改变其指向地址的值,但可以改变指向地址,如:
int a = 20;
int b = 10;
const int *p = &a;
//现在有个需求要把指针*p = 20;
//第一种,直接改变*p的值
*p = b;//因为其为指向常量的指针,所以第一种方式是错误的,编译不能通过
//第二种,改变p的指向,这个是可以使用的
p = &b;

常量指针一旦定义初始化好,其指向的地址和指向地址的值都不能再改变,就是上述的两种方式都不能使用。

指针和多维数组

上面关于指针与多维数组的介绍有部分有点小毛病,所在我在这在说明一下。
多维数组在内存中的存储:多维数组的行列存储只是他的逻辑上的位置关系,其在内存中其实还是一维数组。
在这里插入图片描述
其中a[0],a[1],a[2]代表行地址,他们之间有这样的关系
a[2] = a[1]+1,a[1] = a[0]+1,其中a[0] =a=&a[0][0]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值