指针结构体 的小问题 C语言 5C

指针结构体 初始化时一定要 动态申请分配内存吗 比如 图片说明
哪个对呢 真的只要是个指针结构体 就要动态申请吗 有点糊涂了

16个回答

首先要说明的是,a 是结构名,不能直接引用 ,如 a->next这样的用法是错误的 ,根本通不过编译。
其次,结构名为a,结构内有个int型变量a,不是很好 的风格。
next是一个指向 a结构实例的指针,当然可以是一个空指针(null),从你的定义看 ,其实是个单向链表,参考如下用法:
1.使用结构变量
struct a firstNode, secondNode,thirdNode;

struct a *Header = &firstNode;

firstNode.next = &secondNode;
secondNode.next = &thirdNode;
thirdNode.next = 0;

2.动态分配
struct a firstNode, *secondNode,*thirdNode;
firstNode = (struct a
)malloc(sizeof(struct a));
secondNode = (struct a*)malloc(sizeof(struct a));
thirdNode = (struct a*)malloc(sizeof(struct a));
struct a *Header = firstNode;
firstNode->next = secondNode;
secondNode->next = thirdNode;
thirdNode->next = 0;
注意:动态分配的内存必须自己释放(free());

链表可以这样遍历:

struct a *p = Header;

do {
// 对p的成员进行操作
.......
//取下一个节点
p = p->next;
} while( p);

第二个哦!指针结构体是因为你并没有为这个结构体分配内存,所以需要malloc分配内存,使用完了以后这个内存不用的话还需要free()
比如说链表中删除一个结点

gaoyin0831
悠悠小法 这怎么还有人顶呢?明明回答就是错误的。上面2个写法都不对,改成a->next = malloc()这样就对了。
一年多之前 回复
xuezha009
xuezha009 回复人尽其材: 的确是刚学 空指针 我理解 为啥这个链接的初始化都没分配啊http://blog.csdn.net/timsley/article/details/51139996
一年多之前 回复
billyfff
人尽其材 回复xuezha009: LZ刚学吗?第一个是错的。第二个第一句是对的,第二句也不对,赋了一个空指针。
一年多之前 回复
xuezha009
xuezha009 那为啥这个链接的初始化都没分配啊http://blog.csdn.net/timsley/article/details/51139996
一年多之前 回复
 #include <stdio.h>
#include <stdlib.h>
struct Node
{
    int data;
    struct Node* next;
};

int main()
{
    struct Node *a = (struct Node*)malloc(sizeof(struct Node));
    struct Node *b = (struct Node*)malloc(sizeof(struct Node));
    a->data = 1;
    b->data = 2;
    a->next = b;
    b->next = NULL;

    struct Node c;
    c.data = 3;
    c.next = NULL;
    b->next = &c;
    return 0;
}

就这么两种用法,多看多写就会了

你这种写法是一种链表结构吧?如果链表的话通常操作应该这样:

struct list {
    void *data;
        struct list* next;
};

//init
struct list node1;
struct list node2;
node1->next = node2;
node2->next = NULL;
当然,应用场景下node1,node2都大部分情况是动态申请的

xuezha009
xuezha009 回复双林子木: 大佬 能不能加一下我的qq 251525317 我给你发个图片
一年多之前 回复
yxhlfx
双林子木 回复xuezha009: 因为你给的那个链接中只实现的是一个链表节点的删除接口,已经分配好的链表直接从接口参数传递进来了,既然是删除那为什么要分配新的内存
一年多之前 回复
xuezha009
xuezha009 回复xuezha009: 那为啥这个链接的初始化都没分配啊http://blog.csdn.net/timsley/article/details/51139996
一年多之前 回复
xuezha009
xuezha009 是链表 node1你没动态分配内存啊 ?
一年多之前 回复

malloc是分配堆栈上的指针,struct a aa,直接在程序内存上分配。

billyfff
人尽其材 对,除指针外的变量定义,都是在程序自生内存段中直接分配。
一年多之前 回复
xuezha009
xuezha009 指针结构体 能在程序内存分配?
一年多之前 回复

一个是栈申请,一个是堆申请,用了malloc就一定要free掉

struct list {
void data;
list
next;
};就可以,不需要那么麻烦.详情请看C++primer plus关于声明定义那一块,能简单解决就简单点,不要钻死胡同

struct list {
void data;
list
next;
};就可以,不需要那么麻烦.详情请看C++primer plus关于声明定义那一块,能简单解决就简单点,不要钻死胡同

都没有问题,但是不需要每次都要动态申请内存,在每一次申请之后必须要释放。

栈内存的申请不需要程序员手动释放,
堆内存中的对象在释放之前,是有效的.使用完后需要手动释放.
这两种写法,有不同的应用场景

共16条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言中结构体指针
1、指向结构体的指针变量: C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符“->”.
C语言结构体初始化和结构体指针
结构体初始化#include <stdio.h> //结构体的声明和定义方法 //1.声明和定义分离 struct weapon{ char name[20]; int atk; int price; }; //声明 //定义 struct weapon weapon_1; //==================================== // //2.同时进行
C语言 结构体与结构体指针用法总结
在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。 我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下: struct book {   char name[30];   char author[20]; }; struct book a[2] = { { &quot;Nature
C语言结构体之指针访问
#include #include struct test {     int a;     int b;     char c; }; int main( int argc, char *argv[] ) {     struct test t1;     t1.a = 5;     t1.b = 55;     t1.c = '5';     int *p1 =
C语言结构体中指针的复制问题
#include #include #include typedef struct TNode{ int data; struct TNode * next; }TNode,*Tree; int main(){ Tree a,b,c,d; c=(Tree)malloc(sizeof(TNode)); c->data=7;c->next=NULL; d=(Tree)malloc(si
C语言中结构体与指针的若干问题(在数据结构中的应用)
C语言中结构体与指针的若干问题(在数据结构中的应用)
C语言-结构体指针及结构体嵌套
C语言中结构体是一种构造类型,和数组、基本数据类型一样,可以定义指向该种类型的指针。结构体指针的定义类似其他基本数据类型的定义,格式如下 struct 结构体名 * 指针名; 比如: struct person{char[20] name; int age;};//先定义一个人的结构体 struct person *p;//然后可以定义一个人的结构体指针 struct person p1
C语言中结构体指针的成员变量访问
大家都知道可以用点访问结构体成员变量,同时在结构体指针下可以使用“->”访问其成员变量,但在结构体指针下也可以用“.”访问成员变量。 例如typed struct{ const char *name; int age; }person; void get_info(person* t) { printf((*t).age,(*t).name);//这里的括号一定要加上 } 上面的 (*t).
C语言结构指针详解(推荐)
这篇文章非常清楚,一定要转下---------------------------------------------这篇文章是九九年写的,这篇文章适合中级程序员。有不明白之处不要紧,多看几遍,然后花些时间上机操作及认真思考每个问题。遇到难题要研究、解决,难题出现于哪里?该用什么方式来解决?为什么要选择这个方式解决?有其它的解决方法吗?这样的解决方案完美吗?其实做个程序员这些基本的思考心得
c语言结构体指针成员初始化
今天遇到一个奇怪的问题,错误提示段错误,明显是指针操作有问题。找了N久才把问题定位在自定义的链表上。next指针一直有数据。 struct S{ void (*call)(); S *next; };上面一个简单的结构体,在程序中: struct S *s = NULL; s = (struct S *)malloc(
C语言:结构体中一级指针和二级指针的创建与释放示例
结构体结构体中一级指针和二级指针的创建与释放,以一个例子来说明,笔者这里自己敲得代码,虽然用C语言几年了,但是有的东西还是会遗忘。笔者敲代码过程中也是有bug出现的,经过调试也找到了bug所在,不得不说,巩固也是很重要的。而结构体作为C语言一部分也是很重要的,指针作为C语言的半壁江山也保持着其重要地位。学过C++或Java的都知道class(类),个人觉得结构体就像是class的一部分,不过里面不能放实现class的相关属性函数。代码不是很长,但里面有很多细节的考虑,特别是一级指针和二级指针的内存的申请和释
C 语言通过结构体成员获得结构体指针
通过结构体成员拿到结构体的指针,是C语言实现继承多态的基础。面向对象C编程可以参看这里OOC 面向对象C语言编程实践。这里详细介绍这个核心的操作方法。 /** * Get struct pointer from member pointer */ #define StructFrom2(memberPtr, structType) \ ((structType*) ((char*) m
c中结构体指针的强制类型转换
1、结构体到结构体指针之间的转换 结构体指针的强制类型转换即结构体的数据成员在内存段当中的重新分配,结构体的存储“内存对齐”请参看上篇博客,该论述实例如下: #include #include struct A{     int num;  };      struct B{     int num;     char type;     int age; };
C语言之对队列、结构体、指针、数组的理解
C语言之对队列、结构体、指针、数组的理解 附测试例子 #include #include #define QueueSize 100 typedef unsigned char datatype; //队列的数据元素 typedef struct {     int front;     int rear;     int count; //用于计数     
终于弄明白了的结构体与typedef的使用,还有结构体指针的使用(二层结构体指针)
* 结构体与typedef]:                 c语言规范,定义结构体:                 typedef  struct POINT                 {                     ...                     ...                 }POINT_T, *POINT_P;
结构体含有指针的写入文件
将结构体,以二进制的形式存放到文件中,并且可以实现读的接口,打印读出来信息 #include #include #include typedef struct Student { char *name; //名字 int id; int name_len; //名字长度 }Stu; void write_file() { FILE *fp = NULL; //以写方式打开文件
C语言高频面试题之sizeof与指针和结构体专题总结
sizeof的用法,在C,C++语言笔试面试中常见问题   1,基本数据类型  cout 结果是1 cout 结果是4 cout 结果是4  cout 结果是4  cout 结果是2 cout 结果是4  cout 结果是8 2,指针变量  指针变量的sizeof的值与指针所指的值没有任何关系,所
C语言中,通过指针给结构体中的变量赋值
typedef struct Mech_Para//»úе¼°Ô˶¯²ÎÊý { int32_t P001_TipBoxX; int32_t P002_TipBoxY; int32_t P003_TipBoxZ; int32_t P004_IntervalX; int32_t P005_IntervalY; int32_t P006_TipBuckleX; ...
C语言 一个例子说明结构体变量,结构体数组和结构体指针
输入三个学生的个人信息 包含学号 姓名和三门学科的成绩 输出平均成绩最高的学生的学号 姓名 各科成绩以及平均成绩 代码如下(谭浩强c程序设计的例子)#include&amp;lt;stdio.h&amp;gt;struct Student {int num; char name[20]; float score[3]; float aver; };int main() { void input(struct Stu
c语言指向结构体数组的指针
 c指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。 设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况是一致的。 【例11-6】用指针变量输出结构数组。 struct stu{
关于C语言结构体偏移的一点思考
前言 相信大家在c语言程序开发的过程一定都使用过结构体,那么不知你对结构体中成员变量偏移这块是如何理解的?本文将和大家一起分享下,本人最近关于c语言中结构体偏移的一些思考和总结。 另外这篇博文还可以帮你更好的理解这个问题c语言中两种宏定义的区别,关于这个思考有哪些方面的意义,细心的你可能发现本文所属的类别为linux内核设计与实现,而并非 GNU C语言编程,可能有些同学会有些许好
【C语言】结构体包含指向自己的指针
转自:http://flashcs3.blog.163.com/blog/static/1997203142013297569964/ 问题1:两种声明有什么不同? struct x1 {...}; typedef struct {...} x2; 答:第一种形式声明了一个结构标签,第二种声明了一个“类型定义”。主要区别在于第二种声明更抽象一些,用户不必知道它是一个结构,且在声明它的实例时
指向结构体的指针数组,应用
数组指针跟指针数组,差异看起来很小,结果却千差万别: 数组指针: struct param (*p)[100]         p+1 的结果是地址会增大 100个 sizeof(struct param),这种常用来去对二维数组进行位置的索引。 指针数组: struct param *p[100]         这里创建了一个100个struct param 指针的数组, p+1是指向
c语言结构体数组指针
#include #define N 3 struct student { long int num; char name[20]; float score[3]; float aver; }; int main() { void Input(struct student stu[]); struct student max(struct student stu[]
typedef关键字与结构体、结构体指针的定义
一使用typedef定义结构体 二使用typedef定义结构体指针 一、使用typedef定义结构体typedef用来定义新的数据类型,通常typedef与结构体的定义配合使用。使用typedef的目的使结构体的表达更加简练(所以说typedef语句并不是必须使用的)。定义一个名字为TreeNode的结构体类型(现在并没有定义结构体变量,并不占用内存空间):struct TreeNode {
c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息
通过指向结构体变量的指针变量输出结构体变量中成员的信息。解:程序:#include#includeint main(){struct Student{long int num;char name[20];char sex[10];float score;};struct Student stu_1;//定义struct Student类型的变量stu_1struct Student *p;p =
C语言——结构体与指针引用&结构体数组与指针引用
最近在搞C语言基础储备,无意间发现在此方面的知识还有漏洞,于是上网查阅资料,看到了下面的正文内容,阅后感到思路清晰心情愉悦。所以就顺手记录了下来,以后要是又忘记可以再来看。当然最主要的还是分享给大家!~ ////////////////////////////////////////////gap//////////////////////////////////////////////
C语言快速讲解(五)结构体与指针
前言:作为一个安卓程序员,如果不懂C/C++开发,那么安卓jni、NDK、视频解码、音频解码也没法开发,有需求我们就要学习,加油吧!今天开始我们快速讲解C语言,有Java基础的人适合看本博客。
C语言中->、变量、指针、结构体的解释,通俗易懂!
->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”. 举个例子: struct Data { int a,b,c; }; /*定义结构体*/ struct Data * p;/*定义结构体指
结构体数组和结构体指针
#include #include /** 结构体数组和结构体指针(或结构体数组指针) */ struct Stu{ int age; char sex; char str[10]; //结构体数组的定义与初始化 }stu_arr[2]={{10,20,"haha"},{30,40,"niha0"}}; /** 打印结构体信息 */ int printInfo(struct S
Python与C参数交互---结构体指针作为参数 实例
在Python中某些时候需要C做效率上的补充. 在实际应用中,需要做部分数据的交互. Python 可以通用 ctypes 模块很好地调用C. 下面演示了 Python 中调用C一个标准函数. 传递一个结构指针入. 得到C中分配内存数据 传递出. 希望对你的Python 学习有所帮助. 1 test.c #include #include typedef struct
C语言结构体指针的输入输出
简单构造一个结构体实例如下:struct student{    char name[20];    int score;};1.指向结构体变量demo:int main(){ struct student st1; scanf(&quot;%s %d&quot;, st1.name, &amp;amp;(st1.score)); printf(&quot;%s %d\n&quot;, st1.name, st1.score); return ...
C语言结构体及typedef关键字定义结构体别名和函数指针的应用
结构体(struct)的初始化 struct autonlist { char *symbol; struct nlist nl[2]; struct autonlist *left, *right; };  struct   autonlist   *nlists   =  
结构体类型的指针的强制转换
结构体和int等类型一样,都是数据类型。其他类型怎么转换,结构体就怎么转换,没有什么特殊的地方。 楼主可能想知道的不是结构体怎样强制转换这个问题吧,猜测,楼主想知道如下几个问题: 如果将一个结构体强制类型转换为另一个结构体(或者类型),那这个结构体的成员会怎样了? 如果将一个结构体强制类型转换为另一个结构体(或者类型),那么这个结构体成员的数值又会是什么了? 解答: 1、结构体的本质是:
结构体嵌套指针应注意的问题
在c语言中内存的开辟和回收是一个很重要的问题,但是如果在编程中使用到结构体类型就显得更为重要了,但是如果结构体中有嵌套了指针就变得更加更加的重要了,看起来这是一个很小的点,但是这也是一个很容易被忽略的点,下面就以案例说话struct student { char *name; int age; }stu;第一没有开辟空间int main(void) { strcpy(stu.name,"C语言");
结构体中指针成员的动态分配
示例1:typedef struct _a{ int type; char dat[1]; }A;int main(void) { char* ptr = "hello_world"; A *a = malloc(sizeof(A) + strlen(ptr) + 1); memcpy(a->dat, ptr, strlen(ptr) + 1)
在结构体中获得this指针地址
unsafe {  fixed (void* p = &this)  {    IntPtr Ptr = new IntPtr(p); } } 这是目前唯一获得结构体或类的this指针地址的方法。需要编译器打开 /Unsafe选项。
结构体中的一维,二维指针和内存的释放
代码: /** 时间:2016.8.25 22:47 作者:一叶扁舟 作用:用来练习结构体即结构体的一维和二维指针 **/ #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct Teacher{ //老师的年龄 int age; //老师的名字 char name[64]; //老师的外号,
C语言 结构体指针需要申请内存但函数定义指针不需要申请
在函数定义指针或者变量已经为指针本身和变量本身分配了内存所以用指针指向一个已经定义的变量时不需再分配内存 但是数据结构中用指针指向结构体时只为指针本身分配了内存如果要对结结构体填入内容就要分配一个结构体大小的内存才可以 但只自己分配的内存一定要养成用free()的好习惯
C语言指针实现简单栈
stack:FILO 操作:push 向栈顶压入一个元素 pop 从栈顶弹出元素,pop一个空栈返回-1节点结构体:typedef struct _node { int data; struct _node *next; } Node;栈结构体:typedef struct linkedlist { Node *head; Node *tail; } S
相关热词 c# oracle 开发 c#选择字体大小的控件 c# usb 批量传输 c#10进制转8进制 c#转base64 c# 科学计算 c#下拉列表获取串口 c# 如何防止参数被修改 c#开发微信公众号例子 c# null