打印

一个C语言的疑惑,求帮忙。。。。。。。

[复制链接]
933|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘东君|  楼主 | 2017-10-12 12:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 刘东君 于 2017-10-12 13:09 编辑

声明一个结构体
typedef struct _BlockType_t
{
    unsigned long k;
    unsigned long * stackPtr;               
}BlockType_t;


然后定义两个变量:
BlockType_t block;
BlockType_t * blockPtr;

&block得到变量block的地址,&block.k得到block.k的地址,&block.stackPtr得到block.stackPtr地址;

&blockPtr得到变量blockPtr的地址,那么blockPtr中的元素blockPtr.k的地址如何获得呢?






相关帖子

沙发
feelhyq| | 2017-10-12 12:25 | 只看该作者
blockPtr这个结构体指针要指向某个地址才有存在的意义。

使用特权

评论回复
板凳
刘东君|  楼主 | 2017-10-12 13:11 | 只看该作者
feelhyq 发表于 2017-10-12 12:25
blockPtr这个结构体指针要指向某个地址才有存在的意义。

我只是想问,这个地址如何获取。。。。。blockPtr 也是一个变量啊,那么blockPtr.k是什么? 是变量吗?要是变量如何取得地址呢?  

使用特权

评论回复
地板
renxiaolin| | 2017-10-12 13:38 | 只看该作者
刘东君 发表于 2017-10-12 13:11
我只是想问,这个地址如何获取。。。。。blockPtr 也是一个变量啊,那么blockPtr.k是什么? 是变量吗?要 ...

blockPtr.k的写法就是错的,你自己把这个估计也没运行就问,编译器就会报错,
正确的写法是blockPtr->k

使用特权

评论回复
5
renxiaolin| | 2017-10-12 13:40 | 只看该作者
刘东君 发表于 2017-10-12 13:11
我只是想问,这个地址如何获取。。。。。blockPtr 也是一个变量啊,那么blockPtr.k是什么? 是变量吗?要 ...

你要知道blockPtr->k的地址就是&(blockPtr->k),没啥难,哈哈哈

使用特权

评论回复
6
delin17| | 2017-10-12 13:40 | 只看该作者
blockPtr不是个结构体变量,只是个指针变量;他只占指针变量的存储空间
只能取blockprt的地址。或他所指向的BlockType_t类型变量的地址。

&(blockPtr->k)是取他所指向的BlockType_t类型变量的k成员的地址。

如果对汇编有了解,你就知道结构本是怎么寻址的;也就知道结构指针是怎么找成员变量的。

使用特权

评论回复
评论
小营七郎 2017-10-13 12:30 回复TA
这是我看到最正确的理解了,书上都讲的模糊不清,反汇编回去看看就明白了 
7
renxiaolin| | 2017-10-12 13:44 | 只看该作者
刘东君 发表于 2017-10-12 13:11
我只是想问,这个地址如何获取。。。。。blockPtr 也是一个变量啊,那么blockPtr.k是什么? 是变量吗?要 ...

你对指针还没理解呀,我告诉你吧,BlockType_t block; BlockType_t * blockPtr,你的block是个变量,你的 blockPtr是个指针变量,指针变量存的是变量的地址,不是变量的值,哈哈哈

使用特权

评论回复
8
刘东君|  楼主 | 2017-10-12 14:29 | 只看该作者
renxiaolin 发表于 2017-10-12 13:44
你对指针还没理解呀,我告诉你吧,BlockType_t block; BlockType_t * blockPtr,你的block是个变量,你的 ...

你对指针还没理解呀,我告诉你吧,BlockType_t block; BlockType_t * blockPtr,你的block是个变量,你的 blockPtr是个指针变量,指针变量存的是变量的地址,不是变量的值,哈哈哈


正如你所说,你的 blockPtr是个指针变量 ,那么blockPtr 存放在哪里呢?难道不需要地方存放吗??

使用特权

评论回复
9
刘东君|  楼主 | 2017-10-12 14:32 | 只看该作者
delin17 发表于 2017-10-12 13:40
blockPtr不是个结构体变量,只是个指针变量;他只占指针变量的存储空间
只能取blockprt的地址。或他所指向 ...

blockPtr不是个结构体变量,只是个指针变量;他只占指针变量的存储空间
只能取blockprt的地址。或他所指向的BlockType_t类型变量的地址。

&(blockPtr->k)是取他所指向的BlockType_t类型变量的k成员的地址。

如果对汇编有了解,你就知道结构本是怎么寻址的;也就知道结构指针是怎么找成员变量的。


明白了,谢谢。blockPtr只是个指针变量,他只占指针变量的存储空间
只能取blockprt的地址。

使用特权

评论回复
10
刘东君|  楼主 | 2017-10-12 14:33 | 只看该作者
delin17 发表于 2017-10-12 13:40
blockPtr不是个结构体变量,只是个指针变量;他只占指针变量的存储空间
只能取blockprt的地址。或他所指向 ...

谢谢,明白了 blockPtr只是个指针变量

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

163

主题

1076

帖子

7

粉丝