为什么定义的指针使用时可以当作数组用?
/*清屏函数--将整个屏幕清成同一种颜色*/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 = color;
}
}
这是学Linux开发板时遇到的程序,
不明白的是程序定义的unsigned int *startaddr是指针,为什么后面使用时直接当数组使用? startaddr[ i ] 这个明明是数组的使用方式,指针跟数组怎么串着用,这是什么语法? startaddr = color 的效果就是将 startaddr 所指向的显存中的第 i 个unsigned int设置为color。 定义的指针可以当作数组使用是因为在C和C++中,数组名实际上是一个指向数组首元素的常量指针。因此,当你定义一个指向数组首元素的指针后,你可以通过指针来访问数组中的元素,就好像在使用数组名一样 指针就等于是数组呀。学C的时候不就教了嘛。
建议重新学习一下C语言,就不会有这样的问题了。
有可能是因为你的指针指向数组了呗 例如,如果有一个整型数组 int arr,你可以定义一个指向数组首元素的指针 int *ptr = arr,然后通过 ptr 来访问数组中的元素,比如 ptr、ptr 等,这与使用数组名 arr、arr 是等价的 这种灵活性使得指针可以方便地用来操作数组,从而实现诸如动态内存分配、数组遍历等功能 我觉得就是指针可以是函数,数组也可以是变量,所以你指针的地址在哪儿,就是代表的谁喽 在C语言中,你可以使用指针来模拟数组的行为。指针的下标运算实际上是在进行地址偏移。
ptr 等价于 *(ptr + i),这两者都表示访问指针ptr偏移i个元素的位置的值。
startaddr[ i ] 这个明明是数组的使用方式 startaddr[ i ] 这个明明是数组的使用方式 指针变量存储的是内存地址,而数组名实际上也是一个指向数组第一个元素的指针。因此,指针和数组都可以用来访问内存中的数据。 数组的元素在内存中是连续存储的,这使得通过指针逐个访问数组元素成为可能。 在将数组作为函数参数传递时,数组名会退化为指向数组首元素的指针。 由于数组名和指针在很多方面是等价的,所以在实际编程中,可以使用指针来代替数组名进行操作。例如,可以将数组名赋值给一个指针变量,然后通过该指针变量来操作数组。这种方式在处理动态分配的内存或需要更复杂的内存管理时非常有用。 指针可以进行算术操作,如增加或减少其所存储的地址值。当你对一个指针增加1时,它实际上移动到下一个类型相同的元素的地址。 在C语言中,数组名是一个常量指针,它指向数组的第一个元素。这意味着数组名和指针在很多情况下可以互换使用。例如,如果有一个数组int arr,那么arr就是一个指向int类型第一个元素的指针常量。因此,可以通过arr或*(arr+i)来访问数组中的元素。 当定义一个指针指向数组的首元素时,对指针进行下标操作就相当于访问数组元素。 指针可以进行加减运算,这些运算基于指针所指向的数据类型的大小。