4312|14

411

帖子

9

TA的资源

一粒金砂(高级)

楼主
 

为什么定义的指针使用时可以当作数组用? [复制链接]

 

/*清屏函数--将整个屏幕清成同一种颜色*/
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 ] 这个明明是数组的使用方式,指针跟数组怎么串着用,这是什么语法?

 

此帖出自Linux开发论坛

最新回复

因为数组存储的数据在内存中是连续的,用指针指数组就是指到数组的第一个元素的地址,所以把指针+1+1就能对数组读取或写入   详情 回复 发表于 2024-3-7 09:40
点赞 关注

回复
举报

411

帖子

9

TA的资源

一粒金砂(高级)

沙发
 

我好像自己找到答案了,这个链接里面有说   https://blog.csdn.net/qq_25814297/article/details/87445481?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-87445481-blog-102632978.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-87445481-blog-102632978.pc_relevant_default&utm_relevant_index=2

此帖出自Linux开发论坛

点评

数组 或内存间数据交换经常借助指针。  详情 回复 发表于 2022-7-18 09:40
 
 

回复

143

帖子

1

TA的资源

一粒金砂(高级)

板凳
 

数组就是内存中一段连续的存储单元,指针指向这个内存数据块的头部来存取数据,和用数组操作没有区别。用指针要小心越界。

此帖出自Linux开发论坛
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

4
 

一定意义上等价

此帖出自Linux开发论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

114

帖子

6

TA的资源

一粒金砂(中级)

5
 

這個我有發現,還滿特別的,常常交替使用.

此帖出自Linux开发论坛
 
 
 

回复

2

帖子

1

TA的资源

一粒金砂(初级)

6
 

数组名就是地址

此帖出自Linux开发论坛
 
 
 

回复

6107

帖子

4

TA的资源

版主

7
 
本帖最后由 damiaa 于 2022-7-18 09:43 编辑
shijizai 发表于 2022-5-19 10:41 我好像自己找到答案了,这个链接里面有说   https://blog.csdn.net/qq_25814297/article/details ...

数组 或内存间数据交换经常借助指针。c语言指针是个很灵活的东西。指哪打哪。 你要是指错了地方。它也打。只是 那就惹麻烦了。

此帖出自Linux开发论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

8
 

数组名和指针本质都是内存地址,等价的。

此帖出自Linux开发论坛
 
 
 

回复

224

帖子

0

TA的资源

一粒金砂(高级)

9
 

看一下反汇编代码,就知道它背地里在搞什么东西了

此帖出自Linux开发论坛
 
 
 

回复

227

帖子

0

TA的资源

一粒金砂(高级)

10
 

数组名就是数据在内存的首地址,数组数据在内存中是一段连续的存储单元,指针指针可以指向数组的首地址的

此帖出自Linux开发论坛
 
 
 

回复

1081

帖子

0

TA的资源

五彩晶圆(初级)

11
 

C编译器内部数组名称,是做为指针处理的,也就是首地址。

此帖出自Linux开发论坛
 
 
 

回复

227

帖子

0

TA的资源

一粒金砂(高级)

12
 

数组名与指针有联系也有区别的,数组名是常量类型,而指针是变量类型,不能将指针赋值给数组名

此帖出自Linux开发论坛
 
 
 

回复

365

帖子

0

TA的资源

版主

13
 

打印下指针地址就知道了,还有个简单方法可以验证,*(ptr+x*sizeof(类型))看看是不是等于 ptr[x]

此帖出自Linux开发论坛
 
 
 

回复

227

帖子

0

TA的资源

一粒金砂(高级)

14
 

这方面的知识值得深入探讨学习,希望能提供这方面的资料以供学习

此帖出自Linux开发论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 

因为数组存储的数据在内存中是连续的,用指针指数组就是指到数组的第一个元素的地址,所以把指针+1+1就能对数组读取或写入

此帖出自Linux开发论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表