为什么定义的指针使用时可以当作数组用?

[复制链接]
 楼主| 豌豆爹 发表于 2024-2-21 11:13 | 显示全部楼层 |阅读模式
/*清屏函数--将整个屏幕清成同一种颜色*/
void lcd_clear(unsigned int color)
{
    unsigned int num;
    unsigned int i = 0;
    unsigned int *startaddr = (unsigned int*)tftlcd_dev.framebuffer;
    num = (unsigned int)tftlcd_dev.width * tftlcd_dev.heigh;
    for(i = 0; i < num; i++)
    {
        startaddr[i] = color;
    }

}

 

这是学Linux开发板时遇到的程序,

不明白的是程序定义的unsigned int *startaddr是指针,为什么后面使用时直接当数组使用? startaddr[ i ] 这个明明是数组的使用方式,指针跟数组怎么串着用,这是什么语法?
发货后已经wi 发表于 2024-2-25 19:34 | 显示全部楼层
startaddr[i] = color 的效果就是将 startaddr 所指向的显存中的第 i 个unsigned int设置为color。
q1ngt12 发表于 2024-3-25 15:45 | 显示全部楼层
定义的指针可以当作数组使用是因为在C和C++中,数组名实际上是一个指向数组首元素的常量指针。因此,当你定义一个指向数组首元素的指针后,你可以通过指针来访问数组中的元素,就好像在使用数组名一样
digit0 发表于 2024-3-25 16:06 | 显示全部楼层
指针就等于是数组呀。学C的时候不就教了嘛。
Pretext 发表于 2024-3-25 16:36 | 显示全部楼层
建议重新学习一下C语言,就不会有这样的问题了。
suw12q 发表于 2024-3-25 17:00 | 显示全部楼层
有可能是因为你的指针指向数组了呗
lamanius 发表于 2024-3-25 18:10 | 显示全部楼层
例如,如果有一个整型数组 int arr[5],你可以定义一个指向数组首元素的指针 int *ptr = arr,然后通过 ptr 来访问数组中的元素,比如 ptr[0]、ptr[1] 等,这与使用数组名 arr[0]、arr[1] 是等价的
kaif2n9j 发表于 2024-3-26 08:30 | 显示全部楼层
这种灵活性使得指针可以方便地用来操作数组,从而实现诸如动态内存分配、数组遍历等功能
tax2r6c 发表于 2024-3-26 12:05 | 显示全部楼层
我觉得就是指针可以是函数,数组也可以是变量,所以你指针的地址在哪儿,就是代表的谁喽
烟雨蒙蒙520 发表于 2024-7-31 23:00 | 显示全部楼层
在C语言中,你可以使用指针来模拟数组的行为。指针的下标运算实际上是在进行地址偏移。
ptr[i] 等价于 *(ptr + i),这两者都表示访问指针ptr偏移i个元素的位置的值。
王派oo 发表于 2024-9-30 13:39 来自手机 | 显示全部楼层
startaddr[ i ] 这个明明是数组的使用方式
发货后已经wi 发表于 2024-9-30 21:43 来自手机 | 显示全部楼层
startaddr[ i ] 这个明明是数组的使用方式
10299823 发表于 2024-10-3 08:06 | 显示全部楼层
指针变量存储的是内存地址,而数组名实际上也是一个指向数组第一个元素的指针。因此,指针和数组都可以用来访问内存中的数据。
vivilyly 发表于 2024-10-3 11:38 | 显示全部楼层
数组的元素在内存中是连续存储的,这使得通过指针逐个访问数组元素成为可能。
mmbs 发表于 2024-10-3 12:34 | 显示全部楼层
在将数组作为函数参数传递时,数组名会退化为指向数组首元素的指针。
eefas 发表于 2024-10-3 14:10 | 显示全部楼层
由于数组名和指针在很多方面是等价的,所以在实际编程中,可以使用指针来代替数组名进行操作。例如,可以将数组名赋值给一个指针变量,然后通过该指针变量来操作数组。这种方式在处理动态分配的内存或需要更复杂的内存管理时非常有用。
saservice 发表于 2024-10-3 15:40 | 显示全部楼层
指针可以进行算术操作,如增加或减少其所存储的地址值。当你对一个指针增加1时,它实际上移动到下一个类型相同的元素的地址。
alvpeg 发表于 2024-10-3 17:21 | 显示全部楼层
在C语言中,数组名是一个常量指针,它指向数组的第一个元素。这意味着数组名和指针在很多情况下可以互换使用。例如,如果有一个数组int arr[10],那么arr就是一个指向int类型第一个元素的指针常量。因此,可以通过arr[i]或*(arr+i)来访问数组中的元素。
youtome 发表于 2024-10-3 19:28 | 显示全部楼层
当定义一个指针指向数组的首元素时,对指针进行下标操作就相当于访问数组元素。
lihuami 发表于 2024-10-4 14:32 | 显示全部楼层
指针可以进行加减运算,这些运算基于指针所指向的数据类型的大小。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

531

主题

2170

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部