C语言——指针(1)

本文详细介绍了C语言中的指针概念,包括指针变量、地址获取、解引用、不同类型指针的大小和权限,以及指针运算、void*指针、野指针、传值调用与传址调用的区别。特别强调了数组操作通过指针实现的方法。
摘要由CSDN通过智能技术生成

大家在C语言学习中,一定听到过“指针”这个词。下面就来聊聊“指针”

一.指针

1.概念:在生活中,我们将门牌号叫做地址;计算机中,我们把内存单元的编号也称为地址,在C语言中,地址有一个新的名字叫做指针。通过内存单元的编号,CPU可以找到一个内存空间;在C语言中,我们可以通过指针找到指针所指的对象。

2.指针变量和地址:我们平常说的指针,通常是指针变量,而指针变量就是用来存放内存变量的地址。

(1).取地址操作符(&):通过取地址操作符,我们可以获得一个变量的地址。

通过上段代码可以将a的地址打印出来,"%p"就是专门用来打印地址的。

(2).解引用操作符(*):通过指针找到一个变量的地址所指的对象

pa是存放a的地址,*pa则是通过pa找到a的地址所指的对象——10,把100赋值给*pa,打印出来100,我们能够知道*pa等价于a。

(3).指针变量的大小:

在32位平台下,地址是32个比特位,指针变量大小是4个字节。

在64位平台下,地址是64个比特位,指针变量大小是8个字节。

指针变量大小与内存无关,在相同平台下,大小都相同。

(4).指针变量类型:指针的类型决定了对指针解引用的时候有多大的权限(一次可以操作几个字节)。

char*pa:字符指针,解引用只能访问1个字节

int*pa:整型指针,解引用只能访问4个字节

short*pa:短整型指针,解引用只能访问2个字节

double*pa:双精度浮点型指针,解引用只能访问8个字节

二.指针运算

1.指针+-整数:

由此可知,指针类型决定+-整数时跳过几个字节,int*pa类型跳过4个字节2,char*pa跳过1个字节

2.指针-指针(地址-地址):前提条件是两个指针指向同一空间

由此可知,指针-指针的绝对值是指针和指针之间元素的个数。

3.指针的关系运算:地址大小的比较。

三.void*指针——无具体类型指针

一般使用在函数参数部分,用来接收不同类型数据的地址,实现泛型编程效果,使得一个函数来处理多个类型的数据。

四.野指针:指针指向的位置是不可知的

1.成因:(1).指针未初始化

              (2).指针越界访问

              (3).指针指向的空间释放

int* test()
{
     int a=10;
     return &a;
}
int main()
{
     int* pa = test();
     *pa=10;
     return 0;
}

变量a的地址只在函数test内有效,当把a的地址传给指针pa时,因为出了test函数,变量a的空间释放,pa成为野指针。

四.传值调用和传址调用

1.传值调用

这段代码是用传值调用实现两个数相加

这段代码无法实现用传值调用来实现两个数的交换

2.传址调用

我们能够利用传址调用来实现两个数的交换

五.通过指针打印数组每一位

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值