struct-结构体指针作为实参的值传递问题

问题描述

结构体指针作为实参的值传递问题

#include
#include

struct Process
{
char name[5];
int again;
int serve;
char state;
struct Process *next;
};
void Set(struct Process *L)
{
struct Process Demo;
L=&Demo;
printf("%p
",L);
}
int main(void)
{
struct Process *L=NULL;

Set(L);
if(L)
{
    printf("函数结束,空间释放!
");
    printf("%p
",L);
}
else
    printf("L地址为NULL
");

return 0;

}
程序的运行结果为:
0000000000FDF0
L的地址为NULL

在这个程序中,我在main函数中声明了*L指针,本来打算在Set()函数中把L的地址改为Demo结构体变量的地址,可是程序的运行结果不对呀!怎么回事?求详解分析下!

只有1个币了,只能这次酬谢这么多了!谢谢呐!

解决方案

你的set函数中demo变量本来就是空值,你把它赋给L它肯定输出空值啊

解决方案二:

结构体指针问题
结构体中的指针变量问题
结构体指针移位问题~~

解决方案三:

 main函数中的L和set()函数中的L是不同变量,
 set()函数中改变的形参L的指向,不改变main中的L指向。
 按你的意图应该修改如下:
 #include <stdio.h>
struct Process
{
    char name[5];
    int again;
    int serve;
    char state;
    struct Process *next;
};
void Set(struct Process *&L) //改为引用
{
    struct Process Demo;
    L=&Demo;
    printf("%p
",L);
}
int main(void)
{
    struct Process *L=NULL;
    Set(L);
    if(L)
    {
        printf("函数结束,空间释放!
");
        printf("%p
",L);
    }
    else
        printf("L地址为NULL
");

    return 0;
}

解决方案四:

Set(&L);//改成这样的试试
你的问题应该是二级指针问题,你可以看看下面的博文,理解下,然后重新更改下你的结构体定义
http://blog.csdn.net/touch_2011/article/details/6989538

解决方案五:

这是之后自己找到的一篇博客,里面讲的东西感觉挺好理解的。http://www.cnblogs.com/chinacloud/archive/2011/09/02/2163377.html

时间: 2024-12-05 15:46:52

struct-结构体指针作为实参的值传递问题的相关文章

C返回值是结构体指针问题

问题描述 C返回值是结构体指针问题 请问下面这些前面为什么要加struct呢.Halfedge这些是已经定义了的结构体. struct Halfedge **ELhash; struct Halfedge *HEcreate(), *ELleft(), *ELright(), *ELleftbnd(); struct Halfedge *HEcreate(struct Edge *e,int pm); struct Point PQ_min(); struct Halfedge *PQextra

linux内核不支持struct vm_area_struct结构体中flag标志使用值问题

error: 'VM_RESERVED' undeclared (first use in this function 从linux 3.7.0开始内核不再支持struct vm_area_struct结构体中flag标志使用值 VM_RESERVED,驱动开发中把 vma->vm_flags |= (VM_IO | VM_LOCKED | VM_RESERVED); 改为 vma->vm_flags |= (VM_IO | VM_LOCKED | (VM_DONTEXPAND | VM_DO

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+   指针数组: 在一个数组中,如果它的元素全部都是指针

关于二叉树创建时结构体指针的用法

问题描述 关于二叉树创建时结构体指针的用法 关于二叉树创建时结构体指针的用法 在创建二叉树时我们常常这样用typedef声明一个结点类型和一个二叉树链表: typedef struct BiNode{ //二叉链表定义 char data; struct BiNode *lchild,*rchild; }BiTNode,*BiTree; 这里用typedef声明了一个结点类型BiTNode,BiTree在这里是一个结构体指针. 在创建一个二叉树时我们常常这样定义一个创建函数: 在这个创建二叉树函

struct-关于C语言结构体指针数组的问题

问题描述 关于C语言结构体指针数组的问题 //结构体struct student{ int iNum; char cName[16]; float fChineseScore; float fMathScore; float fEnglishScore;};typedef struct student STUDENT;//输入void InputTranscript(STUDENT MyClass[] int num){ int i; printf(""请输入学生的成绩信息:n&quo

c语言-关于C语言结构体指针类型的强制转换(求大神详细解答)

问题描述 关于C语言结构体指针类型的强制转换(求大神详细解答) #include <iostream> #include <algorithm> using namespace std; typedef struct { string dna; int count; }DNA; DNA dna[101]; **int cmp(const void *a,const void *b) { DNA *aa = (DNA *)a; DNA *bb = (DNA *)b; return a

c语言-C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了。

问题描述 C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了. 下面是源码下载:http://pan.baidu.com/s/1dDhplwH 程序是用C语言写的,VS2013编译. 这是其中使用结构体的定义 这是哈夫曼函数的定义 解决方案 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0 , sizeof(--)): 解决方案二: 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0

冒泡排序-关于结构体指针问题。什么时候在指针前面加*号,什么时候不加

问题描述 关于结构体指针问题.什么时候在指针前面加*号,什么时候不加 我在做一道对结构体数组,按姓名升序进行冒泡排序的题的时候有些不理解指针什么时候加"*"什么时候不加*. 下面上我的代码. 结构体定义 typedef struct array{ int a; char b; }Array; 为结构体赋值 Stu student[5] = { {"uioyi",'m',95,58}, {"asdf",'m',88,28}, {"cvb&

[译]Swift 结构体指针

本文讲的是[译]Swift 结构体指针, 原文地址:Struct References 原文作者:Chris Eidhof 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Swants 校对者:ChenDongnan FlyOceanFish 结构体指针 所有的代码都可以在 gist 上获取. 最近我打算为 Swift 的最新的 keypaths 找一个好的使用场景,这篇文章介绍了我意外获得的一个使用示例.这是我刚研究出来的,但还没实际应用在生产代码上