打印
[方案相关]

数组和指针有着密切的关系,但语法和用法上有重要区别

[复制链接]
1275|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
根特皇宫w|  楼主 | 2024-2-24 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数组(Array)和指针(Pointer)是C语言中两个重要的概念,虽然它们在某些方面有相似之处,但在语法和用法上存在一些重要的区别。


内存分配:


数组: 在声明数组时,需要指定数组的大小,编译器会为整个数组分配一块连续的内存空间。
指针: 指针变量只存储一个内存地址,不会分配实际的内存空间。需要通过动态内存分配函数(如malloc)来为指针分配内存。
大小:


数组: 具有固定大小,一旦声明,大小通常不能改变。
指针: 没有固定大小,可以通过赋值给不同的地址来指向不同的内存块。
初始化:


数组: 可以在声明时进行初始化,也可以在之后进行逐个元素的初始化。
指针: 可以通过将地址赋给指针变量进行初始化。
使用:


数组: 使用下标访问数组元素,数组名表示数组的地址。
指针: 使用解引用操作符(*)访问指针指向的内存内容。
作为函数参数:


数组: 当数组作为函数参数传递时,实际上传递的是数组的首地址。
指针: 可以作为函数参数传递,传递的是指针变量的值(即地址)。
算术运算:


数组: 不支持指针算术运算,不能对整个数组进行加减操作。
指针: 可以进行指针算术运算,例如指针加减整数、比较等、、


示例代码:


<font color="#000000">#include <stdio.h>

int main() {
    // 数组
    int arr[5] = {1, 2, 3, 4, 5};
    printf("Array: %d\n", arr[0]);

    // 指针
    int *ptr;
    ptr = arr;  // 数组名即为数组的首地址
    printf("Pointer: %d\n", *ptr);

    return 0;
}
</font>
总的来说,数组和指针在C语言中有着密切的关系,但在语法和用法上存在一些重要的区别。理解这些区别有助于正确、安全地使用它们。

使用特权

评论回复
沙发
tpgf| | 2024-3-1 13:56 | 只看该作者
从使用角度来讲 数组更容易接受

使用特权

评论回复
板凳
xiaoqizi| | 2024-3-1 14:32 | 只看该作者
使用数组的话 预先占用的空间比较多

使用特权

评论回复
地板
晓伍| | 2024-3-1 15:07 | 只看该作者
这两种类型如果操作不好的话 都会导致数据的误操作

使用特权

评论回复
5
磨砂| | 2024-3-1 19:14 | 只看该作者
无论是数组还是指针 只要类型确定了 大小也就确定了

使用特权

评论回复
6
木木guainv| | 2024-3-1 19:45 | 只看该作者
感觉数组的本质其实就是指针

使用特权

评论回复
7
wowu| | 2024-3-1 20:16 | 只看该作者
指针的应用应该更加灵活一些 但是相对来说难度大一点

使用特权

评论回复
8
ewge| | 2024-3-4 10:38 | 只看该作者
本帖最后由 ewge 于 2024-3-4 10:40 编辑

数组名就是指针吗
数组名就是指针吗?!也许大部分人会说是的,甚至一些教材或者C语言书籍也是这么说的,那么这些说法都是绝对不严谨的。的确,在大部分情况下数组名确实就是一个常量指针,例如:在进行数组元素访问的时候,我们都是通过先找到起始地址,再找到其偏移量才能够访问到我们的数组元素的,此时我们的数组名就可以被当做一个常量指针(数组首元素的地址),它的数值与&arr[0]是相等的;在一维数组进行函数传参时它传的也是数组名(常量指针)
但有俩种情况是除外的,所以出于严谨的说法,数组名并不就是指针

下面我们就来验证一下:
第一种情况:在sizeof中此时数组名为整个数组

来看一个例子:
#include<stdio.h>

int main()
{
        int arr[10] = { 0 };
        printf("%zd\n", sizeof(arr));

        return 0;
}



arr数组有10个元素,每个元素的类型为int型,所以求出的大小为10 * 4 = 40,,而此时数组名为一个指针的话,那么在32位/64位平台下打印的应该是4 or 8,答案显然不是,所以证明此时数组名在sizeof中不是指针而是代表着整个数组。


使用特权

评论回复
9
LOVEEVER| | 2024-3-27 12:50 | 只看该作者
数组可以理解为目视化的指针

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

106

帖子

0

粉丝