| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 480 人关注过本帖
标题:结构体指针初值问题,新手求助!
只看楼主 加入收藏
grclc001
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2013-4-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
结构体指针初值问题,新手求助!
sqstack * initstack(sqstack *a){
    a->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
     // if(!a->base) exit(0);
      a->top=a->base;
       a->stacksize=STACK_INIT_SIZE;
       return a;
} //栈的初始化操作定义的要被调用的函数
 void main()
{   sqstack *s; int n;
     initstack(s); }编译连接后这个警告:warning C4700: local variable 's' used without having been initialized
 这里我只摘取程序的片段,如果我将上面定义成 sqstack s; 调用时用 initstack(&s)整个程序就没问题可以运行出来。
   求解释结构体指针初值的问题 怎么给它赋初值,一定要赋初值吗?先谢谢各位了。
搜索更多相关主题的帖子: 排毒 return 结构体 
2013-04-16 10:06
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:10 
sqstack *s就是声明 s是一个指向 结构体sqstack的一个指针。指针要分配内存空间的,sqstack s这是声明一个s对象

Maybe
2013-04-16 11:54
grclc001
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2013-4-16
收藏
得分:0 
回复 2楼 邓士林
一定义就要马上配内存空间吗?我在调用的函数里面分配内存空间不行吗?
2013-04-16 12:17
grclc001
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2013-4-16
收藏
得分:0 
回复 2楼 邓士林
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
typedef struct
{   int *top;
    int *base;
    int stacksize;
}sqstack;  //栈结构体定义
  sqstack * initstack(sqstack *a){
    a->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
     // if(!a->base) exit(0);
      a->top=a->base;
       a->stacksize=STACK_INIT_SIZE;
       return a;
} //栈的初始化操作


  sqstack *push(sqstack *a,int x){
    if(a->top-a->base==a->stacksize){
        a->base=(int *)realloc(a->base,(a->stacksize+STACK_INCREMENT)*sizeof(int));
         if(!a->base) exit(0);
          a->top=a->base+a->stacksize;
          a->stacksize+=STACK_INCREMENT;}
      a->top++; *a->top=x;
      return a;
 }//元素的入栈操作

   void pop(sqstack *a){
      int e;
       for(a->top;a->top!=a->base;a->top--)
       {   e=*a->top;
       printf("%d",*a->top);}
  } //元素的出栈操作

void main()
{   sqstack s; int n; 这里如果改成sqstack *s 下面全部用s替换程序就运行不出来
     initstack(&s);
      printf("stack initial finshed!\n");
       printf("请输入要转换成八进制的数\n");
        scanf("%d",&n);
 while(n){
         push(&s,n%8);
          n=n/8;
     }
    pop(&s);
}
2013-04-16 12:42
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:10 
sqstack s; int n; 这里如果改成sqstack *s 下面全部用s替换程序就运行不出来
     initstack(&s);

sqstack s 编译器分配了一个结构体给你用,然后你把首地址给initstack,函数内部访问逐个成员,没有问题
sqstack *s 编译器只是分配一个指针,具体指向哪里谁也不知道,然后函数内部去访问,那就是段错误了;

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-04-19 06:50
快速回复:结构体指针初值问题,新手求助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015997 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved