首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于结构体的几个问题

2012-03-08 
关于结构体的几个小问题被结构体搞的头大如斗,几个问题请教一下程序1#include stdio.hintmain(){structp

关于结构体的几个小问题
被结构体搞的头大如斗,几个问题请教一下
程序1
#include <stdio.h>
int   main(){
struct   point   {
            int   x;
int   y;
}   ;
struct   point   p   =   {1,2};
struct   point*   pt;
pt   =   &p;//问题1:   此行,在这种形式下没问题,但是如果换成   *pt   =   p,运行报segmentation   fault,何解?
printf( "x:%d     y:   %d\n ",   p.x,   p.y);

}

程序2:
#include <stdio.h>


int   main(){
struct   point   {
            int   x;
int   y;
}   ;

//setpoint函数设置两个点
struct   point*   setpoint(int   inx,   int   iny){
struct   point*   pp;
pp   ->   x   =   inx;
pp   ->   y   =   iny;
return   pp;
}

struct   point*   p   =   setpoint(1,2);
printf( "x:%d     y:   %d\n ",   p   ->   x,   p   ->   y);

}

问题2:运行时segmentation   fault,   用GDB调试发现
main   ()   at   test.c:19
19                             printf( "x:%d     y:   %d\n ",   p   ->   x,   p   ->   y);
(gdb)   p   p   ->   x
$1   =   1
(gdb)   p   p   ->   y
$2   =   2
(gdb)   s

Program   received   signal   SIGSEGV,   Segmentation   fault.
0x4c5fda0b   in   _dl_fixup   ()   from   /lib/ld-linux.so.2
运行到printf出错,但是在gdb里用print   p   ->   x   和   p   ->   y   结果分别是1   和2。何解?

问题3:
程序基本同程序2,只是把setpoint程序写在了主函数外面,在主函数声明   struct   point*   setpoint(int   inx,   int   iny);
编译未通过
test.c:17:   错误:与   ‘setpoint’   类型冲突
test.c:10:   错误:‘setpoint’   的上一个声明在此    
test.c:   在函数   ‘setpoint’   中:
test.c:19:   错误:提领指向不完全类型的指针
test.c:20:   错误:提领指向不完全类型的指针
何解?

多谢!!


[解决办法]
pt = &p;//问题1: 此行,在这种形式下没问题,但是如果换成 *pt = p,运行报segmentation fault,何解?
------------------------------------------
*pt = p这样写是没错,可关键是你之前并没给pt分配空间,没有空间(地址)它如何存放p。运行报segmentation fault,是说有一个段错误,就说的是没有给指针分配空间。


问题2:运行时segmentation fault,
------------------------------
原因和上题是一样的:定义了这个struct point* pp;但是没有给它分配空间,在struct point* pp;后面增加一条语句pp = (struct point *)malloc(sizeof (struct point));(提醒:malloc属于头文件#include <malloc.h> )


问题3:
-------------
这个容易了。
直接这样写好了:
#include <stdio.h>
#include <malloc.h>

struct point {
int x;
int y;
} ;

struct point* setpoint(int inx, int iny)
{
struct point* pp;
pp = (struct point *)malloc(sizeof (struct point));

pp -> x = inx;
pp -> y = iny;
return pp;
}

int main(){

struct point* p = setpoint(1,2);
printf( "x:%d y: %d\n ", p -> x, p -> y);

}

热点排行