OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3721|回复: 9

有没有对于C语言指针造诣比较高的同志,麻烦来解答下

[复制链接]

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13122
金钱
13122
注册时间
2012-11-26
在线时间
3813 小时
发表于 2016-3-9 16:26:20 | 显示全部楼层 |阅读模式
30金钱
static WORD16 (*aaa)[32][32];   

WORD16是数据类型,即两字节byte ,问这个声明出来代表什么? 一个正常的WORD16类型的二维数组?还是元素为指针的二维数组

(*aaa)[j] [m]= (WORD16)bbb;   

bbb为一个常数,问,这个赋值又是咋整的?



最佳答案

查看完整内容[请看2#楼]

造诣不高。 先上一段开胃代码: static WORD16 kkk[32][32]; kkk[j] [m]= (WORD16)bbb; 这样就非常明白了,kkk是一个32行32列的数组, 往第j行,第m列赋值为bbb -----------------分割线---------------------------- 再看原代码: static WORD16 (*aaa)[32][32]; (*aaa)[j] [m]= (WORD16)bbb; 注意骚色内容,是上面蓝色的直接粗暴替换,没错,就是替换。 aaa是一个指针,指向kk ...
学无止境
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-9 16:26:21 | 显示全部楼层
造诣不高。

先上一段开胃代码:

static WORD16 kkk[32][32];   
kkk[j] [m]= (WORD16)bbb;   



这样就非常明白了,kkk是一个32行32列的数组,
往第j行,第m列赋值为bbb


-----------------分割线----------------------------

再看原代码:

static WORD16 (*aaa)[32][32];   

(*aaa)[j] [m]= (WORD16)bbb;   


注意骚色内容,是上面蓝色的直接粗暴替换,没错,就是替换。

aaa是一个指针,指向kkk类型,即:
aaa是一个指向32行32列的数组的指针。
aaa如果不初始化的话,是一个野指针,正确的初始化可以写作aaa = &kkk;

PS,(*aaa)[j] [m]= (WORD16)bbb;   无条件等价于aaa[0][j] [m]= (WORD16)bbb;   


测试代码:
[mw_shl_code=c,true]
# include "stdio.h"

static int kkk[32][32];

static int (*aaa)[32][32];

int main(void)
{
        kkk[5][9] = 0xAA55;
        printf("val = 0x%04X\n", kkk[5][9]);
       
        aaa = &kkk;
       
        (*aaa)[5][9] = 0x5555;
        printf("val = 0x%04X\n", kkk[5][9]);
       
        aaa[0][5][9] = 0xAAAA;
        printf("val = 0x%04X\n", kkk[5][9]);
       
        return 0;
}
[/mw_shl_code]

dev-cpp编译运行结果:

d.png

------不正经的分割线------

z (22).jpg
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

30

主题

282

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2015-8-24
在线时间
241 小时
发表于 2016-3-9 16:52:32 | 显示全部楼层
自己建一个,然后去赋值,把值读出来,就最好理解 了。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13122
金钱
13122
注册时间
2012-11-26
在线时间
3813 小时
 楼主| 发表于 2016-3-9 16:59:01 | 显示全部楼层
沉默焚烧 发表于 2016-3-9 16:52
自己建一个,然后去赋值,把值读出来,就最好理解 了。

建了,可惜带了个*号   直接被绕晕
学无止境
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13122
金钱
13122
注册时间
2012-11-26
在线时间
3813 小时
 楼主| 发表于 2016-3-9 17:00:15 | 显示全部楼层
xkwy 发表于 2016-3-9 16:57
造诣不高。

先上一段开胃代码:

嗯,地址有进行分配,粗暴替换确实屌啊,看了小一会,直接被指针绕晕。感谢回复,特别是你的回复每次都会带上福利
学无止境
回复

使用道具 举报

29

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1530
金钱
1530
注册时间
2012-9-4
在线时间
262 小时
发表于 2016-3-9 17:07:37 | 显示全部楼层
WORD16肯定有宏定义的地方,“#define WORD16 int”类似这种,用WORD16是为了让程序员看的更明白;(WORD16)自然就是 强制转换成 WORD16 型数据啊;
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13122
金钱
13122
注册时间
2012-11-26
在线时间
3813 小时
 楼主| 发表于 2016-3-9 17:09:06 | 显示全部楼层
aben 发表于 2016-3-9 17:07
WORD16肯定有宏定义的地方,“#define WORD16 int”类似这种,用WORD16是为了让程序员看的更明白;(WORD16) ...

我说的目的不是WORD16   而且我有对WORD16进行解释

我说的目的是带******的指针
学无止境
回复

使用道具 举报

11

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-6-7
在线时间
39 小时
发表于 2016-3-9 17:34:34 | 显示全部楼层
aaa就算是一个指向指针的指针了
回复

使用道具 举报

29

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1530
金钱
1530
注册时间
2012-9-4
在线时间
262 小时
发表于 2016-3-10 10:01:48 | 显示全部楼层
jermy_z 发表于 2016-3-9 17:09
我说的目的不是WORD16   而且我有对WORD16进行解释

我说的目的是带******的指针

哦,那既然(***a)是数组名,那就代表的是地址吧,我是这样认为的,也就是指向指针的指针,楼上是对的吧。。。
STM32---STM32---STM32---STM32---STM32---STM32---STM32---STM32---STM32
回复

使用道具 举报

0

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2015-9-23
在线时间
39 小时
发表于 2016-5-5 08:55:57 | 显示全部楼层
指针数组~数组指针~
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 18:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表