2 iseuwei ISEUWEI 于 2016.03.17 18:15 提问

请教结构体声明中内存状况

数据结构如下:
typedef struct{
char str[10];
}SElemType;//自定义元素类型。
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;//栈长度。
}SqStack;//顺序栈
假设我现在声明一个数组SqStack Sq[10];那么这时内存中怎么个表示情况?这个数组声明时SElemType中的str[10]数组有没有同时声明呢?换句话说,声明的Sq数组的每个分量中,base,top指针是否为空?

2个回答

JeffYang2016
JeffYang2016   2016.03.17 18:27
已采纳

一个个的回答吧。
1、SqStack Sq[10]表示有长度为10的SqStack类型元素的数组,一个SqStack类型元素占用4(SElemType * base)+4(SElemType * top)+4(int stacksize)=12字节,十个元素就占12 * 10=120字节。

2、SElemType中的str[10]数组没有被声明,因为SqStack结构体中只声明了两个SElemType 类型的指针。

3、如果没有赋值,base、top的确为空指针。

JeffYang2016
JeffYang2016   2016.03.17 18:27

一个个的回答吧。
1、SqStack Sq[10]表示有长度为10的SqStack类型元素的数组,一个SqStack类型元素占用4(SElemType * base)+4(SElemType * top)+4(int stacksize)=12字节,十个元素就占12 * 10=120字节。

2、SElemType中的str[10]数组没有被声明,因为SqStack结构体中只声明了两个SElemType 类型的指针。

3、如果没有赋值,base、top的确为空指针。

ISEUWEI
ISEUWEI   2016.03.17 19:32

谢谢大神,终于知道之前那段代码哪错了图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
定义结构体与分配内存
这几天在学习数据结构的时候经常会出现一个问题,就是定义了节点的结构,然后定义了指向节点的指针,但是已经定义了指针为什么就不能直接用呢,后来查了一下相关资料发现原来在新建指针的时候不会一同分配内存给他,所以会出现非常严重的错误。即为当声明一个结构体指针时,为什么还有new(C++)或者malloc()这种语句? 问题描述: 主题:定义结构体指针时,有没有同时分配存储空间定义结构体指针时,有没有同
结构体(声明、初始化、内存对齐、如何传参)
结构基础知识聚合数据类型能够同时存储超过一个的单独数据。C提供了两种类型的聚合数据类型,分别是数组和结构体。数组是相同元素的集合,它的每个元素是通过下标引用或指针间接访问的。结构体也是一些值的的集合,这些值称为它 的成员,但一个结构的成员可能具有不同的类型。数组元素可以通过下标访问,这是因为数组元素长度相同,但在结构体中并非如此,由于每个成员的类型可能不同,那么长度也就可能不同,所以就不能通过下标...
C语言中 struct成员变量顺序对内存的占用
在C语言的结构体中,是会按照其变量类型来进行分配内存大小的。但是对于不同的编译器,结果是i不同的,在VC++6.0中是怎么个分配情况呢?用一下C中的关键字sizeof()来测试下,注意sizeof()不是函数哦!只是关键字而已。下图就是在VC++6.0中的字节分配情况: 下面来分析一下,C中结构体中成员变量的写法,对占用内存的影响。 却发现结构不是13个字节?却是24个字节?为
C++中类和结构体在内存中的存储问题
简单点,非静态成员变量占用空间,成员函数(无论是否是静态的)则不占用空间: class  MyClass{ int a;  //占用4字节 float b; //占用4字节 static int c;//在全局数据区,所有对象共享,不计入各对象中 int fun1(); //不占用对象的空间 float fun2();//不占用对象的空间 static i
结构体内部的成员是何时分配内存空间的?
昨天晚上发现一个很多菜鸟都会遇到的一个问题:结构体内部的成员是何时分配内存空间的? 示例: 程序代码:#include <stdio.h> struct stu { int a; int b; };void f(void) { struct stu m; int c; …… }int main() { int d; f(); …… }
结构体成员顺序的影响
http://hi.baidu.com/snort/item/965f542209173c102b0f1c0b
定义结构体指针时,有没有同时分配存储空间?
前言 问题的来源于在学数据结构的时候,C++的语法和C语言的语法竟然不一样。 1.首先函数的参数有两种传递方式,一个是值传递,一个是地址传递。当指针作为参数传递的时候,即为地址传递,但C++写的时候需要加&引用符号,而C语言却不用。 2.本文谈的是这个问题,即为当声明一个结构体指针时,为什么还有new(C++)或者malloc()这种语句,一直搞不清楚,后台问bb,然后百度了一下,才明白
使用new为结构分配内存而不是声明一个结构变量
// practice4-8.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include const int len = 70; struct pizza { char brand[len]; double diameter; double weight; }; int _tmain(int argc, _TCHAR* argv[]) {
C语言中结构体内存分配机制
C语言中结构体内存分配机制 内存分配遵循的原理: (1) :分配的内存空间的大小必须是4的倍数 (2):在结构体中每一个类型类型说明符(char,int,float,double,long)分配的内存空间的大小与类型说明符最大的字节保持一致(例如:结构体中字节最长的类型为long,则每一个类型分配的内存都和long保持一致). (3):若分配的内存空间比当前的类型的字节大,
C++中结构体的声明和定义
1  //定义一个结构体,类型为struct Student 2  struct  Student      3  { 4      string name; 5      double e