链表插入数据:为什么在成员函数insert中还要判断指针head是否为空指针?

在“list”这个类中的“list(){head=NULL}” 不是已经将“head”定义为空指针了吗?为什么在定义它的成员函数insert的时候还要判断是否为空指针?

class list
{
    node *head;
    public:
        list(){head=NULL;}
        void insertlist(int adata,int bdata);
        void deletelist(int adata);
        void outputlist();
        node *gethead(){return head;}
};
void list::insertlist(int adata,int bdata)
{
    node *q,*p,*s;
    s=(node*)new(node);
    s->data=bdata;
    p=head;
    if(head==NULL)
    {
        head=s;
        s->next=NULL;
    }
}
0

1个回答

因为head并非恒为空指针。
list(){head=NULL;} 执行构造函数之后的确是空指针了
但是执行insertlist之后,下一次再执行的时候就不是了
所以要判断

0
weixin_43599456
巴啦啦老魔仙 噢懂了谢谢!
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
对象指针为NULL,为什么还是可以调用成员函数
C++中,空指针是不能够使用的,然而空对象指针有时候却能够调用成员函数。 先来看一下以下程序: #include #include using namespace std; class A { public: static void f1(){ cout<<"f1"<<endl; } void f2(){ cout<<"f2"<<endl; } void f3(){ c
数据结构单链表中关于空指针的理解
数据结构单链表中关于空指针的理解 直接上题目: h 为不带头结点的单链表的头指针,现在需要将 x 结点插入到单链表的最后,作为最后一个结点,要求写出相应的算法。 捕获.PNG 这是一道非常基础的题目,我写的算法如下: while( h ){ h = h -&amp;amp;amp;gt; next ; } h = s ; s -&amp;amp;amp;gt; next = null ; 写完之后觉得很简单嘛,自我感觉良好,乍一看...
c++中使用空指针调用成员函数的理解
使用空指针调用成员函数会如何? 举个例子:base是基类,里面有两个函数:non-virtual func2 以及 virtual func1; derived是派生类,使用public继承自base,里面有四个函数:virtual func1,non-virtual func3,non-virtual func4以及static non-virtual func5,特别注意:func4调用了...
关于单链表函数操作中return head的意义
return head; /*返回创建链表的头指针 */  头指针就是指向链表的首地址,返回首地址就可以对联表进行相关操作,至于头指针里面有没有值,看你自己放不放,无所谓的
为什么C++调用空指针对象的成员函数可以运行通过
先看一段代码:#include &amp;lt;iostream&amp;gt; using namespace std; class B { public: void foo() { cout &amp;lt;&amp;lt; &quot;B foo &quot; &amp;lt;&amp;lt; endl; } void pp() { cout &amp;lt;&amp;lt; &quot;B pp&quot; &amp;lt;&amp;lt; endl; } void Funct
C/C++ 下如何判断空指针
今天在写C++代码,遇到一个很奇怪的问题,在Android JNI下判断一个指针是否为空,但是发现 (NULL == ptr )或者 (nullptr== ptr )表达式均为真,然而ptr是刚new出来的,也有地址值。 这就很让人费解了,不信邪,写了这么多年的代码了,这种代码怎么看怎么没问题,同样的代码到x86环境下跑一次,却得到了我想要的结果,真是让人凌乱啊。。。 最后只能祭出了我
关于java中判断为空出现空指针异常的问题
判断为空的问题 java中如果一个值xx可能为空,则不可用  xx.equals("")  或 xx.length()  等   因为一旦为空  则这个值后再接方法或属性,就会出现空指针异常。 可用  "".equals(属性)   "".isEmpty(属性)   代替 判断是否为空  ---  if("xx".equals("")  ||  xx==null){ 为空操作 }
详解this指针--为什么空的对象指针可以调用成员函数
引题class A{ public: void function() { cout << "I can run" << endl; } };int main() { A* pa = NULL; pa->function(); system("pause"); return 0; }C++中,空指针是不能够使用的,然而空对象指针有
LinkList 单链表的实现
LinkList.h#include "stdio.h" #include "math.h" #include "malloc.h" #include "stdlib.h"//typedef int DataType;//LinkNode是链表的结点类型,LinkList是指向链表的指针类型 //如果定义了 LinkList L;则定义了一个链表,L指向该链表的第一个结点 //不带头结点,链表为空,
3、OC nil与null的区别【空指针与野指针】
1> 利用野指针发消息是很危险的,会报错。也就是说,如果一个对象已经被回收了,就不要再去操作它,不要再尝试给它发消息。 2> 利用空指针发消息是没有任何问题的,因为nil是可以回应消息,但使用null就不行,也就是说下面的代码是没有错误的: [nil setAge:10];
二叉链表树中结点个数 与空指针个数 二叉树的边数的关系
二叉链表树中结点个数 与空指针个数 二叉树的边数的关系
判断指针是否为空
这两天一直迷惑一个问题,就是如何判断指针是否为空,通常有如下两种方式(假设p为指针): if (NULL == p) { // ... } if (!p) { } 到底哪种方式好呢?这个问题应该从两个方面去考虑,本文就是围绕这两个问题展开的,仅限于C语言。 它们在语义、编译等环节上是否等价? 它们在可读性、可维护性等上面是否等价? 一、是否存在隐式类型转换? 《C 程序设计语言
C++类对象空指针访问成员函数(静态绑定)
题目:class A{ public: void test(){printf("test A");} }; int main(){ A*pA=NULL; pA->test(); }结果是输出“test A”而不是程序崩溃,原因如下:一种解释: A*pA=null; pA->test();//当调用成员函数时,只是将实参null传给this指针test成员函数
Delphi 判断指针为空的函数 Assigned
1.根據 Delphi 指令參考手冊中 說明: Assigned 函式在參數不為nil時傳回True,表示指针已经指到某个内存地址,这个内存地址可能是一个对象地首地址,也可能在函数或过程中,声明一个指针变量,没有赋值为nil ,无乱的指向某处,这两个种情况,Assigned(指针变量)都不为nil ,  函数放回True; 而參數為nil時則傳回False。 Assigne
Greendao 插入数据失败
今天使用greendao实现数据库增删改查,可是在插入数据的时候崩溃了,错误是 no such table  ***  , 如下图: 原因是:创建数据库的时候数据库的名字 写成了context.getPackageName()这是个路径    所以数据库就没有创建成功 private HtDBManager(Context context) { if (daoSes
空指针可以调用成员函数?
有下面一个简单类:class A { public: void fun(){ cout << "I'm class A"<<endl; } };用一个空指针调用上面的fun函数:A* pa = NULL; pa->fun();讲道理,空指针应当是”不可用”的,自然也不能调用其成员函数了,但是结果却出乎意料地正确执行了: 为什么??其实,关键在于每个成员函数的this
C++ 判断指针为空的写法
C++之父的C++圣经《C++程序设计语言 特别版》中说: 大家不要听某些人说判断指针是否为空用(p==NULL)或(p!=NULL)的格式,C++之父认为这样写是不好的,提倡直接写(p)或(!p)的形式。 在win32开发中,if ( NULL == p )是极好的写法。但不要写成:if ( p == NULL )  C++之父主要是反对使用“NULL”,因为在某些特殊的开发环境叫,“N
置空指针调用成员函数问题
问题由来:new一个自己的类,用完后delete指针,置空NULL 后,打断点指针为空,但是依旧可以调用出类里的函数,且编译通                    过了; 学习参考路径:    点击打开链接 总结:在java,Python语言中是做不到这样的,但是C++中可以,原因是其绑定方式不一样;  java,python是动态绑定,也就是说,代码实现的时候是用到什么找什么,比如用到成...
内核中判断返回指针是否错误的方法:使用IS_ERR或者IS_ERR_OR_NULL
内核中判断返回指针是否错误的方法:使用IS_ERR或者IS_ERR_OR_NULL。 参考include/linux/err.h #define MAX_ERRNO  4095   #ifndef __ASSEMBLY__   #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)   static in
hive0.13 insert空指针问题记录
问题背景:INSERT...VALUES is available starting in Hive 0.14;但我们在hive0.13中希望简单插入数据然后测试; 然后建表,表结构: create table IF NOT EXISTS testj(       f1      string,       f2        string)       partitioned by (day...
链表头节点问题(指针作为参数传递不能为NULL)
真是脑残,以前没有注意过这个问题,今天恶心了我好一会。做个记录,以后不要再犯。  这样在main函数里面定义一个指针变量然后传进函数里面在申请空间的做法是错误的。 void creat(node* head) { if(head==NULL){ head=(node*)malloc(sizeof(node)); } node *p=(node*)malloc(sizeof(node...
已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
我们假设单向链表的节点如下: template typename T> class list_node { public: list_node * next; T data; }; 这个题目算是考察数据结构的最基础的题目了,有两种方法可以解此题: 方法一:     void reverse(node*& head)     {         if ( 
mybatis insert 插入字段为空解决办法
需求:当插入时,部分字段参数为空或使用实体类插入时部分属性无值,直接插入会报空指针 解决办法: &amp;lt;settings&amp;gt; &amp;lt;!--插入为空时插入空值避免报空指针--&amp;gt; &amp;lt;setting name=&quot;jdbcTypeForNull&quot; value=&quot;NULL&quot; /&amp;gt; &amp;lt;/settings&amp;gt; mybatis配置文件加入setting即可解决空指针 ...
如何判断一个字符串指针是否为空(c)
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; void main() { char *str = (char*)malloc(sizeof(char)*10); //分配地址空间 gets(str); //输入 if(str[0]!='\0') //由于字符串以'\0'结尾,故可以这样来判断 ...
使用两个指针判断一个单向链表是否存在环
使用两个指针pfast, pslow从头节点开始,依次向后走,pfast一次两步,pslow一次一步,当两个指针相等,则存在环,否则不存在。 当pfast与pslow相遇的时候,pfast经过的环形路程比pslow经过的环形路程一定多了环长的整数倍。从起点走到连接点与pfast和pslow相遇的点继续走到连接点的距离相等。 假设从起点到连接点走a步到连接点,记为S(a),设pslow走
C指针错误(3)-链表的尾指针要赋值NULL
下面是建立一个链表和打印链表的函数 输入0为结束#include <stdio.h> #include <stdlib.h>struct ListNode { int val; struct ListNode *next; };struct ListNode* creat_list() { struct ListNode *head=(struct ListNode *)
单链表存在环的问题
问题给定一个单链表,只给出头指针header 判断链表是否存在环 求环的长度 求环的连接点 求带环链表的长度 // 简单的链表定义及生成带环链表函数 typedef struct Node { struct Node *next; } node;node* makeNode() { node * pNode = (node*)malloc(sizeof(node
有两个循环单链表,头指针分别是head1和head2,实现算法将链表head2连接到head1之后,连接后的链表仍然是循环链表的形式
头文件:函数的声明 #include #include #include typedef int ElemType; typedef struct Node { ElemType data; struct Node* next; }ListNode,*LinkList; LinkList CreateCycList(int n);//创建循环单链表 void DisplayCyc
判断一个指针是否为空,abort()、assert、抛出异常的使用、ASSERT与VERIFY宏的区别
判断一个指针是否为空//vs20051. abort()#include//...if(!ptr) abort();2. assert#include//....assert(ptr!=0);//assert(xx);当xx为非零值时,无异常,当xx为零食异常中断3. 抛出一个异常if(!ptr)  throw "Panic: prt ==0";4.ASSERT与VERIFY宏的区别
已知head为单链表的表头指针,链表中存储的都是整形数据,实现下列运算的递归算法
已知head为单链表的表头指针,链表中存储的都是整形数据,实现下列运算的递归算法: (1)求链表中的最大值。 (2)求链表中的结点个数。 (3)求所有整数的平均值。
关于空指针(指针指向为NULL)和void类型的指针的理解
正在学C,书上老说空指针,
java中判断空字符串时避免出现空指针的方法
遇到的一点问题,说不上大问题,就是有点烦人,如何判断字符串是否为空: 我们经常使用的方法,比如:public boolean function (String params){ if (params == null || params.equals("")) { //todo } }上面可能是我们经常使用的方法,这个方法其实是存在弊端的:if语句里面使用的是或判
循环链表的特性以及判断单链表是否有环(九)
基于尾指针的循环链表
c/c++下指针判空失效问题 讨论
今天在写c的时候,好久不写,容易遇到指针问题!!!(这是我刚开始写的内心独白)可是。。。真的遇到了!!!刚开始以为是我写的判空错误,我刚开始是这样写的:p-&amp;gt;next==NULL 然后一直以为是我其他地方逻辑的问题,调试发现一直pop栈的时候会有问题,就是老是栈为空了还在pop。好不容易查到博客说要用if(p-&amp;gt;next)或着if(!p-&amp;gt;next),可是我不知道为什么呀!!!后...
oracle先判断数据是否存在再插入
有时候用oracle的数据库,插入数据的时候需要判断一下。比如,每天每人只能写一条。 在插入的时候就要先做个判断,查一下是不是当天有此人的操作记录。 就要先 select count(*) from xxx 然后再执行insert,其实不需要这样子,oracle内置在insert语句中判断的,如下sql: insert when (not exists (select 1 from
Linux内核指针判断
内核指针判断 https://blog.csdn.net/jasonchen_gbd/article/details/44968395 https://blog.csdn.net/xxu0123456789/article/details/6339625 #ifndef _LINUX_ERR_H #define _LINUX_ERR_H #include &amp;lt;linux/compile...
空指针:NULL还是0
<br />标题: 空指针:NULL还是0<br /> 看林锐博士的《高质量C/CPP编程》附录的试卷,对空指针的判断居然强制要用NULL(如 if(p==NULL) ),后来从这篇文章看到一些东西觉得有点意思。不耐烦看的人看我的归纳:<br /><br />0、0和数值“零”在指针上下文中不是一回事,0就是空指针,而不一定是“零”<br />1、用0还是NULL表示空指针是风格问题,而不是对与错的问题。<br />2、空指针真的有非零的,多是罕见机器。但此时 0 在指针上下文中会自动转为合适的空指针。<b
C语言空指针NULL以及void指针
空指针NULL 在C语言中,如果一个指针不指向任何数据,我们就称之为空指针,用NULL表示。例如: int *p = NULL; 注意区分大小写,null 没有任何特殊含义,只是一个普通的标识符。 NULL 是一个宏定义,在stdio.h被定义为: #define NULL ((void *)0) (void *)0表示把数值 0 强制转换为void *类型,最外层的(
C++在delete指针之后是否要置为null
delete一个指针之后,只是回收指针指向位置的空间,而指针本身的值不变(也就是说还是指向那个地址的)。你需要手工将其赋值为NULL。 现在对于printf的反汇编代码不太熟悉,以后写个实例分析一下。
C++中空指针访问类方法
先看一段代码:#include<iostream>using namespace std;class A { public: void func(){ cout << "hello" << endl; } }; int main(){ A *p = nullptr; p->func(); return 0; }一开始看到这个代码,感觉p指向的是
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 为什么中国还要学习区块链 学习java后还要学什么