这里面出了什么问题呢?为什么这个函数没有作用

问题描述

这里面出了什么问题呢?为什么这个函数没有作用

将一个新项目插入到一个链表中,我设计了这个函数但是发现没有任何作用

#include

struct entry
{
int date;
struct entry *next;
};

void insertEntry (struct entry beInsert, struct entry insert)
{

beInsert.next = insert.next;
insert.next = &beInsert;

}

int main(void)
{
struct entry n1, n2, n3, n4;

struct entry *listStar = &n1;  //开头

n1.date = 10;
n1.next= &n2;

n2.date = 20;
n2.next = &n3;

n3.date = 30;
n3.next = (struct entry *)0;  //结尾

n4.date = 50;

insertEntry(n4, n2);

// n4.next = n2.next; 这两行是函数运行的模式,不用函数直接运行能得到结果
//n2.next = &n4;

while(listStar != (struct entry *)0)
{
    printf("%in", listStar->date);
    listStar = listStar->next;
}

return 0;

}


解决方案

其实这个问题仔细想想和我们c教程里的交换a,b值是一样的,首先,你传过去的是一个值给了形参,形参在函数里进行了一系列操作后
返回就释放掉了,相当于什么也没干。
在这里使用指针进行操作就可以了。
struct entry
{
int date;
struct entry *next;
};
void insertEntry (struct entry *beInsert, struct entry *insert)
{
beInsert->next = insert->next;
insert->next = beInsert;
}
int main(void)
{
struct entry n1, n2, n3, n4;
struct entry *listStar = &n1; //开头

n1.date = 10;
n1.next= &n2;

n2.date = 20;
n2.next = &n3;

n3.date = 30;
n3.next = (struct entry *)0; //结尾

n4.date = 50;

insertEntry(&n4, &n2);
// n4.next = n2.next; 这两行是函数运行的模式,不用函数直接运行能得到结果
//n2.next = &n4;
while(listStar != (struct entry *)0)
{
printf("%in", listStar->date);
listStar = listStar->next;
}

system("pause");

return 0;
}

时间: 2024-09-19 16:32:39

这里面出了什么问题呢?为什么这个函数没有作用的相关文章

用ASP的方法动态写出JavaScript的表单验证的函数checkSubmit()

javascript|表单验证|动态|函数 <%'请转存为CheckForm_JS.asp使用 '*****************************************************************************'函数名称:CheckForm_JS(frmName,errStr)'功能:用ASP的方法动态写出JavaScript的表单验证的函数checkSubmit()'使用方法:1.<!--Include File=URL+本函数所在的页>;' 

代码-菜鸟的函数哪里出了问题?(C语言函数返回指针的题型)

问题描述 菜鸟的函数哪里出了问题?(C语言函数返回指针的题型) 实现功能,一旦某一组里面有一个成绩在line_num以下的,就把这一组的数字都输出. 代码如下,改了好久还是没发现问题出现在哪里. 求教高手指点,非常感谢 >< ~ # include<stdio.h> int main(){ float *search(float *(pointer)[3], float line); float score[][3]={ {23, 56, 89}, {56, 12, 91}, {8

js判断出两个字符串最大子串的函数实现方法_javascript技巧

如下所示: <!DOCTYPE html> <html> <head> <title></title> </head> <script type="text/javascript"> function search(str1,str2) { var i=j=k=a=jk=kk=0; var m=str1.length; var n=str2.length; var index=0; var maxlen

《Effective C++》item25:考虑写出一个不抛异常的swap函数

 std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: int main(int argc, _TCHAR* argv[]) { int a[10] = {1,2,3,4,5,6,7,8,9,10}; vector<int> vec1(a, a + 4); vector<int> vec2(a + 5, a + 10); swap(vec1, vec2); for (int i

浅出Java 的Xml编程

xml|编程 对于Xml,我的认识是,一个用来存放数据的标准格式.怎么看我都觉得XML和Html,完全不一样,也许仅仅只是都使用了标记来作为文档解释的原因吧.所以人们才喜欢把XML和HTML对比来看.对于我个人而言,XML就是一个简单方便的数据文件.因为.它不同与一般的关系型数据库,把数据看出二维表.通过基本的关系运算,获取二维表中的数据.XML仅仅把数据当成一个文档,然后正对文档解析获取数据.所以我的看法是,要操作XML文档,只要一个能够解释XML的文档解释器就可以了.然后把解释的内容.转变成

【Android】自定义带进度条的WebView,修复不弹出软键盘的BUG

记录下最近开发中研究的带进度条的WebView 自定义类吧. 其实网上有不少这样的帖子,但是都没有一个完整的好用的例子,最关键的是,用网上的例子后有一个很明显的bug,就是遇到输入框的话没法弹出软键盘.研究了好久总算搞定了.特此记录下. 直接上源代码,关于代码的解释,个人感觉注释中已经添加的足够清楚了. ProgressWebView import android.content.Context; import android.content.res.Resources; import andr

异常抛出-哪些情况会导致程序不抛出异常而直接结束?

问题描述 哪些情况会导致程序不抛出异常而直接结束? 程序在入口已经加入 SetUnhandledExceptionFilter 设置了异常处理,平时程序崩溃都能正常跳到异常处理发送错误报告, 但是最近程序突然崩溃且没有异常抛出了. 求教: 哪些情况会导致程序直接退出而不会抛出异常? 解决方案 一般CLR本身遇到严重的问题,可能不会丢出异常,比如互操作调用的函数破坏了内存.堆栈,运行不良的COM组件,CLR进程被强行关闭(包括进程强制结束)等等. 解决方案二: 你在入口加了异常处理,并不代表你对每

javascript-js 判断alert 对话框是否弹出的问题 请看下面图片

问题描述 js 判断alert 对话框是否弹出的问题 请看下面图片 这里的作用是我按一次enter键 就相当于点了一次提交按钮 现在问题来了 如果我的文本框为空 就会弹出不能为空 我连续按enter键 不能为空提示消失了 又弹出了 现在就要如果对话框是打开状态 按一下enter键 就把对话框关闭 而不是又点击提交按钮.. 解决方案 自己判断弹出层是否打开,打开就不trigger就行了 var dialogopen=false;///控制变量,如果验证不通过打开了dialog时设置dialogop

寻帮助-想要程序可以运行出正负数及小数点运算

问题描述 想要程序可以运行出正负数及小数点运算 //主函数 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class UserGUI implements ActionListener { private CalcEngine calc; private JFrame frame; private JTextField display; p