数组和指针

一、什么是指针?什么是数组?两者的区别?


在计算机科学中, 指针 Pointer )是编程语言中的一个对象,利用地址,它的值直接指向
points to )存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以
说,地址指向该变量单元。因此,将地址形象化的称为 指针 。意思是通过它能找到以它为地址
内存单元 指针是一种变量类型,它存储的是内存地址而不是数据本身。简单来说,你可以把指针想象成一个箭头,它指向了内存中的一个位置,这个位置存储了某个数据(可能是另一个变量的值,或者是数组中的一个元素等)。通过指针,程序可以直接访问和操作内存中的数据,这为高效的数据处理提供了可能。 所以指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。 指针是用来存放地址的,地址是唯一标示一块地址空间的。 指针的大小在 32 位平台是 4 个字节,在 64 位平台是 8 个字节

数组是一种数据结构,用于在计算机内存中连续存储相同类型的数据。数组中的每个元素可以通过索引(或下标)来访问,索引通常是从0开始的。数组使得管理一组有序的数据变得非常方便,如计算平均值、排序等。


联系
内存存储:数组在内存中连续存储数据,而指针可以指向数组中的任何一个元素。因此,通过指针,我们可以遍历或修改数组中的元素。
访问元素:虽然数组通过索引访问元素,但我们也可以使用指针的算术运算(如指针加1)来遍历数组。
数组名:在大多数编程语言中,数组名在表达式中会被转换为指向数组首元素的指针。这意味着,你可以使用数组名作为指针来访问数组的第一个元素或遍历整个数组。


区别
本质:指针存储的是内存地址,而数组是存储相同类型数据的数据结构。
用途:指针主要用于操作内存中的数据,包括动态内存分配、函数参数传递等;数组则主要用于存储和管理一组有序的数据。
大小:指针的大小是固定的(通常为4字节或8字节,取决于系统和编译器),而数组的大小则由其包含的元素数量和元素类型决定。
灵活性:指针比数组更灵活,因为它们可以指向任何类型的数据,并且可以在运行时改变指向。而数组一旦定义,其类型和大小就固定了。
安全性:使用指针时需要更多的注意来避免内存泄漏、野指针等问题,而数组相对更安全一些(尽管数组越界仍然是一个常见问题)。


二、什么是指针数组?什么是数组指针?

指针数组是一个数组,它的每个元素都是一个指针。这些指针可以指向不同类型的数据,但通常在同一个指针数组中,所有的指针都指向相同类型的数据。指针数组允许你存储多个变量的地址,这在处理字符串数组、动态数组或者对象数组时特别有用。数组指针是指向数组的指针。它存储的是整个数组的地址,而不是数组第一个元素的地址。通过数组指针,你可以直接访问整个数组。

三、指针类型的意义

指针的定义方式是: type + * 。 其实: char* 类型的指针是为了存放 char 类型变
量的地址。 short* 类型的指针是为了存放 short 类型变量的地址。 int* 类型的指针是为了存放
int 类型变量的地址。
指针的类型决定了指针向前或者向后走一步有多大(距离),对指针解引用的时候有多大的权限(能操作几个字节)。 比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

四、野指针

1、定义:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

2、野指针成因

  • 指针未初始化
  • 指针越界访问
  • 指针指向的空间已经释放

3、如何规避野指针

  • 指针初始化
  • 小心指针越界
  • 指针指向空间释放及时置NULL
  • 避免返回局部变量的地址
  • 指针使用之前检查有效性

五、&数组名和数组名分别代表的意义

  • 1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数 组。
  • 2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组除此两种情况之外,所有的数组名都表示数组首元素的地址。 
  •   &arr 表示的是 数组的地址 ,而不是数组首元素的地址。(细细体会一下)
    数组的地址 +1 ,跳过整个数组的大小。

 六、什么是二维数组?二级指针?函数指针?

二维数组是数组的数组,可以看作是表格或矩阵。在C语言中,二维数组通过两个索引来访问其元素,通常第一个索引表示行,第二个索引表示列。二维数组的内存分配是连续的,但在逻辑上,我们可以通过两个索引来访问它的元素,这使得它看起来像是一个二维的网格。

二级指针(或称为指针的指针)是一个存储指针地址的指针。换句话说,它指向一个指针变量。在C语言中,这允许你操作指针本身,而不仅仅是指针所指向的值。二级指针在动态内存分配、构建复杂的数据结构(如链表中的链表、树结构等)以及处理函数指针数组时特别有用。

函数指针是指向函数的指针。在C语言中,函数本身也有地址,就像变量一样。函数指针允许你存储和传递函数的地址,并通过这个地址来调用函数。这对于回调函数、将函数作为参数传递给其他函数等场景非常有用。

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值