C++结构体中关于结构体变量,指针,地址之间的转换
来源:互联网 发布:淘宝服装店货源网站 编辑:程序博客网 时间:2024/06/15 05:29
程序目标是:通过结构体来实现顺序栈的动态创建。
有两段代码
出错代码:
using namespace std;#include <iostream>typedef struct{int *arr;int top;int size;int name;}//define struct pointer and struct classSeqStack, *pSeqStack; //初始化pSeqStack Stack_Init(int n){SeqStack S;S.arr= new int[n];S.size = n;//stack is nullS.top = -1;//一个结构体变量的指针就是结构体变量所在内存的起始地址//换句话说&S(结构体变量的内存地址)可以用对应的结构体指针来存储return (&S);}//入栈,注意输入操作定义在函数外,让函数功能单一pSeqStack PushStack(int n, int num){pSeqStack s1=Stack_Init(n);//cout << s1->top << endl;//for (; s1->top < num-1; (s1->top)++)//此处是不是有一个缺陷:不管我是否赋予top初值,程序都可以执行for (int i = s1->top; i < num - 1; i++)cin >> s1->arr[i+1];s1->top = num - 1;//cout << s1->top << endl;return s1;}//出栈void OutStack(pSeqStack s2,int n, int inNum, int outNum){cout << s2->top << endl;if (inNum>outNum){for (int i = s2->top; i>= inNum - outNum; i--){//cout << s2->arr[s2->top] << " ";//cout << "sd" << endl;}}}void main(){pSeqStack s2 = PushStack(20, 8);OutStack(s2, 20, 8,3);system("pause");}
正确代码:
using namespace std;#include <iostream>typedef struct{int *arr;//栈顶标识位int top;//栈最大长度int size;//栈已有数据个数int stackNum;}//注意SeqStack不是结构体变量,而是一个类型,*pSeqStack是指向结构体变量的指针SeqStack, *pSeqStack;pSeqStack Stack_Init(int n){SeqStack S;S.arr = new int[n];//未放入数据S.stackNum = 0;S.size = n;//stack is nullS.top = -1;//一个结构体变量的指针就是结构体变量所在内存的起始地址//换句话说&S(结构体变量的内存地址)可以用对应的结构体指针来存储return (&S);}SeqStack PushStack(SeqStack sp,int num){//cout << sp.top << endl;//验证是否将sp数据传递进来。/*for (int i = sp.top+1; i <= num - 1; i++)cin>>sp.arr[i]; sp.top = num - 1;*/for (; sp.top < num - 1; sp.top++){cin >> sp.arr[sp.top + 1];}//记录放入数据个数sp.stackNum = num;cout << sp.top << endl;//输出的下标值是num-1return sp;}void OutStack(SeqStack sp,int outNum){if (sp.size>outNum){for (; sp.top >= sp.stackNum - outNum; sp.top--)cout << sp.arr[sp.top] << " ";}}void main(){SeqStack s1 = *Stack_Init(20);SeqStack s2=PushStack(s1, 8);OutStack(s2, 3);system("pause");}
首先:typedef struct
{
int *arr;
int top;
int size;
int name;
}
//define struct pointer and struct class
SeqStack, *pSeqStack; 中的SeqStack不是结构体变量,而是类型。
错误的原因是:在进行结构体传递(函数对结构体进行修改之后,又将其返回,再作为其他函数的参数进一步操作)时,传递的一直是一个地址,而没有用结构体指针进行存储。
即:pSeqStack s2 = PushStack(20, 8);
OutStack(s2, 20, 8,3);
SeqStack s1 = *Stack_Init(20);
SeqStack s2=PushStack(s1, 8); 是不同的。
结构体基础知识点:C/C++提供了指向结构体变量的运算符,p->num,表示p当前指向的结构体中的变量num。
阅读全文
0 0
- C++结构体中关于结构体变量,指针,地址之间的转换
- C/C++中关于地址、指针和引用变量的学习笔记(三) : 结构
- C/C++中关于地址、指针和引用变量的学习笔记(九) : 内存结构
- 结构体指针与结构体中变量的指针
- C语言中结构体指针的成员变量访问
- C语言中->、变量、指针、结构体的解释,通俗易懂!
- 关于结构体变量指针
- C/C++中结构体变量及指向结构体指针变量的内存分配问题
- 【C++】指向结构体变量的指针
- c中结构体指针的强制类型转换
- c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息
- C-关于结构体变量和结构体指针变量函数传递值得问题
- 关于指针结构体函数中指针变量的赋值&的问题思路
- 结构体变量的指针
- 已知某结构体变量中某一元素的地址求结构体变量的地址。
- C语言中结构体变量之间赋值
- VC中CString和WPARAM之间的相互转换(结构体变量和WPARAM之间的转换)
- VC中CString和WPARAM之间的相互转换(结构体变量和WPARAM之间的转换)
- IAR duplicate definitions 错误
- Anko:Android 代码动态布局的新方案
- node.js中的url.resolve方法使用说明
- iOS开发算法--插入排序
- 分布式架构学习之:MySQL源码编译安装(CentOS-6.7+MySQL-5.6)
- C++结构体中关于结构体变量,指针,地址之间的转换
- 静态地图上放图标2,图片添加热点
- 一笔画与哈密尔顿环
- python-瀑布线指标编写
- qq群30天发言人数
- 在浏览器中清除solr库数据
- iOS开发算法--快排
- 【技术文档】JEECG整合JXLS步骤与开发
- enumerate函数的用法