回复: 48
结构体数组指针+1和下标+1意义区别?
(209692688)
出0入0汤圆
电梯直达
发表于 2014-9-26 21:58:20
|
只看该作者
|倒序浏览
|阅读模式
设有结构体:
struct struct_original
{
u8 *a[5];
u8 *b[10];
u8 *c[16];
}
然后由上定义结构体数组:
struct struct_original *struct1[20]
设有用来计数的变量:
u8 i;
现在我通过程序发现 struct1[1+i]->c 和 (struct1[1]+i)->c 的值是不一样的。
我对此的理解是:struct1[1]当中存放的是是struct1这个结构体数组中第二个成员(因为数组都是从0开始计数)的首地址,+i 以后则还是第二个成员,
只不过是“前进”了i个内存地址后的地址,例如原来struct1当中指向的地址是0x0000 0000,加上5(这里假设i的值是5)了以后变成了0x0000 0005了,并非结构体的第7个成员。
而struct1[1+5]则非常直接了当的是第7个成员的首地址,因为运算实在下标括号内进行的。
这是我的理解,希望能得到高人指点是否正确。我仔细想了一下,感觉又不对,struct1是指针,struct1[0]+1应当是指向第二个成员的首地址也就是struct1[1],但是通
过在stm32上实时演算出的结果又不是这样。
(209689933)
出0入0汤圆
发表于 2014-9-26 22:44:15
来自手机
|
只看该作者
你的理解太匪夷所思
下标怎么就指向第二个元素了
还有你满天飞舞的*,你确定你知道他是什么
精华汤圆VIP
{*}
(209689888)
出0入0汤圆
发表于 2014-9-26 22:45:00
|
只看该作者
“struct1[0]+1应当是指向第二个成员的首地址也就是struct1[1]”这句话是错的。struct1[0]+1应该指向struct1[3]。
(209689611)
出0入0汤圆
发表于 2014-9-26 22:49:37
来自手机
|
只看该作者
hithms 发表于 2014-9-26 22:45
“struct1[0]+1应当是指向第二个成员的首地址也就是struct1[1]”这句话是错的。struct1[0]+1应该指向struct ...
楼主看吧
一个本来想帮你的人
被你的*号们带进坑里了
精华汤圆VIP
{*}
(209689290)
出0入0汤圆
发表于 2014-9-26 22:54:58
|
只看该作者
(209688882)
出0入0汤圆
发表于 2014-9-26 23:01:46
|
只看该作者
你的数组里面放的地址值确定是连续的吗?应该是数组元素的地址是连续的,但是存放的地址不一定是连续的。 struct1[1+i]->c 和 ((&struct1[1])+i)->c 是相同的
(209685951)
出0入0汤圆
发表于 2014-9-26 23:50:37
|
只看该作者
没看懂啊
(209685685)
出0入0汤圆
发表于 2014-9-26 23:55:03
来自手机
|
只看该作者
hithms 发表于 2014-9-26 22:54
嗯,对。我搞错了。看错了,还以为LZ声明结构体中只有三个指针变量(应该是31个)。假如是三个的话,应该 ...
恭喜再次掉入坑里:)
精华汤圆VIP
{*}
(209684722)
出0入0汤圆