A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

(*p)老师说了是固定写法,代表指针变量p将来肯定是指向函数的;
那下面的怎么解释啊?
#include <stdio.h>
int main()
{
        struct Nums
        {
                int sum;
                int minus;
        }
        struct Nums count = {12,4};
        struct Mums *p =&count;
        printf("sum=%d,minus=%d\n",(*p).sum,(*p).minus);
        return 0;
}
麻烦详细一些,现在很糊涂,谢谢

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

9 个回复

正序浏览
在windows32系统中,每个程序运行的时候,系统就会为他开辟一个大小为4G的空间,一般程序领空是0x40000000开始的,也就是你的代码块存放在这里,其他的变量或者系统的dll文件就由系统随机分配空间的,用new关键字开辟空间也是一样随机分配的
回复 使用道具 举报
*p不就是指针么?p就是内存地址,*p就是那个内存地址的值,根据指针类型的不同,*p可以是基本数据类型,也可以是指向函数或者数组的首地址
回复 使用道具 举报
(*p)是定义指向函数的指针时的固定写法,这个没有问题。
结构体(*p).sum 加括号是为了改变运算符的优先级,因为如果不加小括号的话 点运算符的优先级要高于*运算符。

  1. *p.sum      //结构体的情况下 不加括号 相当于*(p.sum)
  2. (*p).sum             //用括号将*的优先级提高
复制代码
回复 使用道具 举报
李鹏-ios 发表于 2014-4-28 15:42
函数指针的声明int (*p)(参数1,参数2,...); 就是这种固定格式,与其他数据类型的指针定义是不同的;而你 ...

哦,明白了,谢谢
回复 使用道具 举报
兰闻天 发表于 2014-4-28 15:29
意思是只有指向函数(*p)才是固定写法吗?

函数指针的声明int (*p)(参数1,参数2,...); 就是这种固定格式,与其他数据类型的指针定义是不同的;而你的例子中使用(*p).sum来访问结构体的,(* p)表示 p 指向的结构体变量,(*p).sum 是 p 指向的结构体变量中的成员 sum 。注意 * p两侧的括号不可省略,因为成员运算符 “ . ” 优先于“ * ”运算符,* p.sum 就等价于*(p.sum)了。这样你应该清楚了吧?
回复 使用道具 举报
李鹏-ios 发表于 2014-4-28 15:25
指针是C语言中广泛使用的一种数据类型,利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串, ...

意思是只有指向函数(*p)才是固定写法吗?
回复 使用道具 举报
指针是C语言中广泛使用的一种数据类型,利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串,结构体等数据类型,当然也可以指向函数,不过要指向函数的话,应该类似这样定义吧,如int (*p)(参数1,参数2,...);  //fp是函数指针;而你上面举得例子指针指向的是结构体这种数据类型的,而不是函数。

评分

参与人数 1黑马币 +3 收起 理由
脸皮猴 + 3

查看全部评分

回复 使用道具 举报
gaoxinglei123 发表于 2014-4-28 15:18
没有(*p)是固定写法这种说法。这儿还是按优先级的顺序算的。。
楼主是定义了一个Nums类型的指针p指向了Nums ...

哦,谢谢!!可是,(*p)是固定写法这个是老师在指向函数的指针里讲的啊。
回复 使用道具 举报
没有(*p)是固定写法这种说法。这儿还是按优先级的顺序算的。。
楼主是定义了一个Nums类型的指针p指向了Nums类型的变量count。即p里面储存了count的地址
*p的值就是count。printf("sum=%d,minus=%d\n",(*p).sum,(*p).minus);因为.的优先级是比*高的。
所以这儿加个括号。先算*p再算.    (*p).sum就是count.sum

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马