关于整型指针和结构体指针



struct aa
{
    int a;
    int b;
}aa
int * p;
struct * q;
p=q;
printf("%d,%d",p,q);


结果p,q值不一样啊?为什么?莫非编译器对他们进行了一些处理?

16 个解决方案

#1


你这个程序编译能通过?你用的什么编译器?

#2


struct * q; ?? 你这样可以编译通过?

#3


我猜你是 aa * q;

这样子的话编译器会跟你错误信息:无法从int * 转 aa *

#4


同3楼解,这是两种不同类型的指针变量,不可能通过编译

#5


引用 4 楼 yaoxinchao 的回复:
同3楼解,这是两种不同类型的指针变量,不可能通过编译

+

#6


(1)首先我觉得应该把LZ的结构体定义代码修改一下,不然通不过编译
struct aa
{
    int a;
    int b;
};
(2)
aa temp;
int * p;
aa * q=temp;
p=q;
printf("%d,%d",p,q);
//其实p,q都指向结构体aa中a成员的地址,所以是相同的

#7


额。。大家都关注这个了。其实我的代码不是这个样子的...
我只是大概表达个意思。
还是题目的要求,就是结构体指针能不能直接给整型指针赋值?

#8



/*利用指针,改变结构体内部的数据交换*/
#include <stdio.h>

typedef struct aa
{
int a;
int b;
}aa;


void main()
{
aa Struct,*ptr,*qtr;
int *p=qtr;                             //这个就是结构体指针给整型指针赋值
Struct.a=1;
Struct.b=5;
ptr=&Struct.a;
qtr=&Struct.b;
printf("%ld\n",p);                      //输出整型指针的值
}

以上是部分代码可以编译过去,环境VS2005 . 但是输出的整型指针值和结构体指针值不一样。 
如果不能直接这样赋值,有没有办法能够使结构体指针 qtr 给整型指针 p 赋值?

#9


看来楼主还没看明白啊?
楼上都写的很清楚了 这是这种类型不同的指针  怎么可以赋值??赋值符号两边的变量要是同一种类型的  除非你强制类型转换~~
引用 7 楼 fanxiaochuan 的回复:
额。。大家都关注这个了。其实我的代码不是这个样子的...
我只是大概表达个意思。
还是题目的要求,就是结构体指针能不能直接给整型指针赋值?

#10


该回复于2011-11-28 10:57:16被版主删除

#11


删错程序了。把初始化的给删了。

#12


引用 9 楼 zhutou100hao 的回复:
看来楼主还没看明白啊?
楼上都写的很清楚了 这是这种类型不同的指针  怎么可以赋值??赋值符号两边的变量要是同一种类型的  除非你强制类型转换~~
引用 7 楼 fanxiaochuan 的回复:

额。。大家都关注这个了。其实我的代码不是这个样子的...
我只是大概表达个意思。
还是题目的要求,就是结构体指针能不能直接给整型指针赋值?

对,怎样强制转换?

#13


该回复于2011-11-28 10:57:16被版主删除

#14


我有个疑问啊。关于c的整型提升和类型转换
unsigned short a;
signed short b;
a=1;
b=-1;
if(-1>1u)printf("yes");
if(b>a)printf("yes");
上面这两个很纠结啊。。先整型提升再转换?-1被转换为usigned,所以比1大了;
为什么b和a就不一样了呢?

#15


引用 6 楼 goldbeef 的回复:
(1)首先我觉得应该把LZ的结构体定义代码修改一下,不然通不过编译
struct aa
{
    int a;
    int b;
};
(2)
aa temp;
int * p;
aa * q=temp;
p=q;
printf("%d,%d",p,q);
//其实p,q都指向结构体aa中a成员的地址,所以是相同的

应该在temp前加上&。
没错这个可以。

#16


明白哪搞错了。谢谢大家回帖。
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告