c++指针概念与讲解--wizard

c++指针概念与讲解

指针
指针的概念:

//指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

(重点)指针定义
与指针有关的运用:

//指针变量是存放一个变量地址的变量,不同于其他类型变量,它是专门用来存放内存地址的,也称为地址变量。定义指针变量的一般形式为:类型说明符*变量名。
类型说明符表示指针变量所指向变量的数据类型;表示这是一个指针变量;变量名表示定义的指针变量名,其值是一个地址,例如:charp1;表示p1是一个指针变量,它的值是某个字符变量的地址。

在这里插入图片描述

计算机所有的程序都需要内存来执行。

2:地址
在计算机中,内存是以字节为单位的存储空间,每个字节都有他自己的一个编号,这个编号就被称为内存地址。内存地址是存储数据的标志,可以理解为我们家的门牌号,通过门牌号可以找到里面的成员。内存数据所在内存中存储的位置就用内存地址来标识。

有关更深的理解点击这里 关于内存地址

我们在c语言中在定义一个变量时,系统就会为该变量分配内存空间,当我们赋值时,那么就相当于往杯子里装了水一样。
我们来看一个程序
在这里插入图片描述
我们来看一个运行结果
在这里插入图片描述
我们在定义num的时候,系统为它分配了空间,我们初始化,那么就是给杯子里装上了水。当然我们可以用键盘的输入----scanf()函数,
如下:
在这里插入图片描述
我们可以看到这个&号,叫做取地址符,我们要键盘输入赋值,首先要找到他的内存地址才可以,就好像送货上门,你得根据门牌号来送货。
如果我们在定义变量时未赋值,在控制台输出这个变量的值出现什么结果?
在这里插入图片描述
在这里插入图片描述
程序给了他一个33。当然在不同编辑器下的情况可能不同。像vc++会赋初值为0。
我们来看一个char类型的变量,遇到同样的情况,会是什么值?
在这里插入图片描述
在这里插入图片描述
codeBlocks给了一个空。
现在我们写一个程序,来访闻下相关变量的地址
我们这样写,并可能会发现一些有趣的
在这里插入图片描述
我们来看运行结果
在这里插入图片描述
我们可以看到他们的地,然后也会发现,在数组中取地址 ch 和&ch是等价的,我们还可以看到连续的数组里的地址,&char[0],&char[1]。非常有趣,更多的大家可以自己尝试。

(重点)指针定义
在这里插入图片描述

指针:指针我们可以理解为变量的地址,也就但同于变量的地址。
看一些资料容易混淆指针变量和和指针的区别,指针变量时存放地址的变量,而指针则等用于地址。有时候会把指针变量简称为指针,所以时常在碰上真正的概念区别时,反而晕了。

ok,我们用代码来证明
在这里插入图片描述
我们来看运行结果
在这里插入图片描述

我们可以看到,两者是等价的,撸一串代码对于概念的理解也很有帮助。

与指针有关的运用
1:c语言动态内存管理
指针的一个意义在于更方便的管理我们的内存空间。
我们来介绍几种函数。
1:void* malloc(size_t size)void*(无值型)所以这个是可以强制转换的,可以转换成需要的指针。
malloc函数用来开辟一段连续的内存空间,开辟成功返回值为这块内存空间的地址,开辟失败返回值为NULL,size为空间的大小,单位为字节。在用malloc开辟空间后要检查是否开辟内存成功,使用完这段内存后要用free(void* ptr)释放内存,否则会造成内存泄漏。
例如:

int *p1;
double *p2;
p1 = (int)malloc(4);
p2 =(double
)malloc(8);

我们来看一个例子
在这里插入图片描述
如果没有看清图片,我们来看代码片

#include<stdio.h>
int main()
{
   
    int *ptr;
    ptr =(int*)malloc(sizeof(int));
    if(ptr==NULL)
    {
   
        printf("分配内存空间失败");
        exit(1);//退出
    }
    printf("请输入一个整数 ");
    scanf("%d",ptr);
    printf("你输入的整数是: %d\n",
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值