c语言指针基础知识

本文详细介绍了C++中的指针基础知识,包括指针的定义、无类型指针、空指针、野指针的避免、指针运算以及二维数组和指针的交互。讨论了通过指针访问数组元素的方法,函数指针的使用,以及如何将函数指针作为参数传递。此外,还涵盖了指针数组和二级指针的概念,强调了初始化指针的重要性以及不同类型指针间的比较和运算规则。
摘要由CSDN通过智能技术生成

指针基础知识

指针是一个地址
指针变量是存放地址(指针)的变量

指针变量的定义:
基类型 *变量名;
&变量名

Int a; int * p = &a;
Int *p; int a; p = &a;

无类型指针

Void*
指向void 的指针,简称void 指针。Void 被称为万能指针
Void 指针指向一块内存,却没有告诉程序该用何种方式来解释这块内存。因此,不能用这种类型的指针直接获取所指内存的内容,必须先转成合适的具体类型的指针才行
若想声明一个可以接受任何类型指针参数的函数,可以将所需的参数设定为void
指针
比如 void*memset(void * s,int c, size_t n);

空指针

NULL是宏定义 即 0 ;

野指针

指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。

访问指针变量的内容

*指针变量;

指针的运算

与整数进行加减运算,实际上是将指针进行上移,下移操作。同类型指针进行相减运算,其结果是两个指针的地址之差除以指针基类型所占字节数,同类指针关系运算 可以进行 == != < > <= >=

小结

指针定义时最好初始化
同类指针没有相加运算
对于两个毫无关联的指针比较大小是没有意义的

二维数组与指针

第一种是行指针,它使用二维数组的行地址进行初始化;
第二种是列指针,它使用二维数组的列地址进行初始化。
基类型(*变量名)[常量N];

例如:

Int (*p)[4]
Int a[3][4];
Int (*p)[4] = a;
或者 int (*p)[4] = &a[0];

通过数组名访问元素a[i][j];

a[i][j]  *(a[i] + j)  *(*(a + i) + j)   (*(a + m))[j]

通过行指针p访问元素a[i][j]

P[i][j]  *(p[i]+j)  *(*(p + i)+ j)  (*(p+i))[j];

将二维数组赋值给指针

Int a[3][4];
Int *p;
P = &a[0][0];
如何通过指针引用二维数组a的元素a[i][j];
1.*(p+i*4 + j)
2.P(i*4 + j)

指针函数

基类型 * 函数名(参数列表);
函数指针
返回值类型(*变量名)(参数列表);
用函数指针引用函数

Int func(int a,int b )

Int (*p)(int,int);
P  = func;

函数指针作为函数参数

指向函数的指针变量的一个重要作用是把函数的地址作为参数传递到其 他函数。函数指针作为函数参数,把函数的入口地址传递给形参,这样就能在被调函数中使用实参函数了。

void func(int(*p)(int, int), int b, int n)

指针数组的定义

一个数组,若其元素均为指针类型数据,该数组称为指针数组,也就是
说,指针数组中的每一个元素都存放一个地址,该数组元素相当于一个
指针变量。定义一维指针数组的语法格式如下。
基类型 * 变量名[数组长度];
需要注意是的,数组指针和指针数组不是同一个概念,数组指针是一个
指向数组的指针,指针数组是指数组中的元素类型都是指针类型。

二级指针

当一个指针指向的变量是个指针变量时,这个指针就是一个指向指针的
指针,也就是二级指针,而该指针类型的变量就是二级指针变量。定义
二级指针变量的语法格式如下所示。
基类型 **变量名

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dearzcs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值