问一个问题,C++中指针定义后,在什么情况下非需要new操作 [问题点数:0分]

Bbs1
本版专家分:15
结帖率 100%
Bbs1
本版专家分:41
定义一个结构体指针需要分配存储空间?
前言 <em>问题</em>的来源于在学数据结构的时候,C++的语法和C语言的语法竟然不一样。 1.首先函数的参数有两种传递方式,<em>一个</em>是值传递,<em>一个</em>是地址传递。当<em>指针</em>作为参数传递的时候,即为地址传递,但C++写的时候<em>需要</em>加&引用符号,而C语言却不用。 2.本文谈的是这个<em>问题</em>,即为当声明<em>一个</em>结构体<em>指针</em>时,为<em>什么</em>还有<em>new</em>(C++)或者malloc()这种语句,一直搞不清楚,后台问bb,然后百度了一下,才明白
一个单项的链表,在没有头结点的情况下,只知道有一个指向结点B的指针p,假设这个结点B不是尾结点,删除该节点B。
<em>问题</em>:有<em>一个</em>单项的链表,在没有头结点的<em>情况下</em>,只知道有<em>一个</em>指向结点B的<em>指针</em>p,假设这个结点B不是尾结点,删除该节点B。 p->data = p->next->data; p->next = p->next->next; free(p->next)解析:要删除p指向的结点B,必须要将结点B前后的两个节点A和C连接起来,但是该单链表没有头结点,因此无法追溯到A,也就无法将A和C相连
指针什么时候需要申请内存空间?
<em>指针</em><em>什么</em>时候<em>需要</em>申请内存空间?? 1、<em>指针</em>所指向的地址<em>需要</em>存放数据的时候<em>需要</em>申请空间。 int *q;只有地址,没有内存空间。这个地址是随机地址。 (1)没有申请内存空间: int *q; *q = 1; cout 错误!<em>指针</em>变量q没有空间,不能直接存放数据。   (2)申请内存空间: int *q = <em>new</em> int
c++的new和delete的方法使用以及不用new定义变量
<em>new</em>和delete运算符用于动态分配和撤销内存的运算符 <em>new</em>用法:           1.     开辟单变量地址空间                1)<em>new</em> int;  //开辟<em>一个</em>存放数组的存储空间,返回<em>一个</em>指向该存储空间的地址.int *a = <em>new</em> int 即为将<em>一个</em>int类型的地址赋值给整型<em>指针</em>a.                 2)int *a =
C++ 何时使用动态分配(即使用new关键字)?何时使用指针
动态分配 在你的<em>问题</em>里,你用了两种方式创建对象。这两种方式主要的不同在于对象的存储时间。当执行Object myObject;这句代码时,它作为自动变量被创建,这意味着当对象出了作用域时也会自动销毁。而当你使用<em>new</em> Object()这种方式时,对象所拥有的内存是动态分配的,这表示直到你调用delete()方法对象才会被销毁,否则一直存在。当<em>需要</em>用动态分配内存来处理时,你应该只使用动态分配的方式
C/C++误区五:检查 new 的返回值
首先澄清一下,这个误区仅对 C++ 成立,这里不过是沿用“C/C++ 误区”这个衔头罢了。 我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空<em>指针</em>”(亦即检查分配内存的<em>操作</em>是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 <em>new</em> 上,那可就不一定正确了。我经常看到类似这样的代码: int* p = <em>new</em> i
什么时候用指针指针 **
比如声明u32 **buf 这个buf要作为<em>一个</em>函数的参数,这个函数的作用是告诉bufni
头文件和指针
如果几个源文件共有<em>一个</em>头文件,<em>需要</em>特别注意的是,不能在头文件中<em>定义</em>数据!最好是在<em>一个</em>源文件中<em>定义</em>,在头文件中声明。 少用全局变量,全局变量很容易在使用中改变。如果函数<em>需要</em>返回<em>指针</em>,则在函数中用malloc分配内存,避免使用全局变量。此时注意释放内存! 注意<em>指针</em>引用的使用。如一下例子:  char * func(char * k,int num) //改为char
定义一个结构体指针需要分配存储空间?malloc
#include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; typedef struct name{ char sname[10]; }Name; typedef struct person{ Name *myname; }Person; int main() { Person wang; wang.myname= (Name*)m...
new一个类的指针(不同括号的区别)
括号分为两种,中括号[]或小括号()。为方便说明,<em>定义</em><em>指针</em>类型为class test, <em>指针</em>为test *ptest;一、 中括号的情况。中括号是用来标示申请的是<em>一个</em>对象,还是一组对象。1 没有中括号时,即ptest = <em>new</em> test; 这时ptest得到的是<em>一个</em>对象*ptest, 释放时使用delete ptest;2 带有中括号时,在中括号中<em>需要</em>有<em>一个</em>正整数参数。ptest = <em>new</em> t
指针作为局部变量的注意事项
参见http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183962.html所述。 #include //此函数中d也是个局部变量,函数执行完自动销毁,但是<em>指针</em>分配的空间不会被自动回收,除非程序员delete掉。 //所以这个可以正常输出。 char *a() { char *d = "ZET";//这个初始化的一种形式,相当
C++ primer Plus书之--C++指针及使用new分配内存,使用delete释放内存
先来个简单的程序初步认识一下<em>指针</em>  #include &amp;lt;iostream&amp;gt; using namespace std; int main() { // <em>定义</em><em>一个</em>int型变量 int num = 123; // <em>定义</em><em>一个</em>int型<em>指针</em>变量 int * p_num; // <em>指针</em>指向num的地址 p_num = &amp;amp;num; cout &amp;lt;&amp;lt; &quot;num =...
【转载】C语言中指针使用的注意事项
相信大家对<em>指针</em>的用法已经很熟了,这里也不多说些<em>定义</em>性的东西了,只说一下<em>指针</em>使用中的注意事项吧。 一.在<em>定义</em><em>指针</em>的时候注意连续声明多个<em>指针</em>时容易犯的错误,例如int * a,b;这种声明是声明了<em>一个</em>指向int类型变量的<em>指针</em>a和<em>一个</em>int型的变量b,这时候要清醒的记着,而不要混淆成是声明了两个int型<em>指针</em>。 二.要避免使用未初始化的<em>指针</em>。很多运行时错误都是由未初始化
c++ 定义指针 delete
C++无论何种数据,是否要delete关键看其空间是否使用<em>new</em>分配的。 1,函数冲<em>定义</em>的局部变量<em>指针</em>,单纯是<em>一个</em>局部变量是不用delete; 2,C++ 如果类中有<em>一个</em><em>指针</em>数据成员,而没有用<em>new</em>, 析构函数也是不用delete的; 在类或函数中,int* ,char* 这些只要不是<em>new</em>的,也同样不用释放,系统会自动把他们占的内存释放掉,只有<em>new</em>的才会手动的去delete 原理: int*,...
delete一个指针之后,要记得设置为NULL
 众所周知,最开始我们用<em>new</em>来创建<em>一个</em><em>指针</em>,那么等我们用完它之后,一定要用delete将该<em>指针</em>删掉。但是,值得注意的是,难道就仅仅是删除这个<em>指针</em>这么简单的么?下面,我们用<em>一个</em>程序来说明这个<em>问题</em>: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #includ
什么要用函数指针?
分类: C/C++ “函数<em>指针</em>”是指向函数的<em>指针</em>变量,因而“函数<em>指针</em>”本身首先应是<em>指针</em>变量,只不过该<em>指针</em>变量指向函数。这正如用<em>指针</em>变 量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每<em>一个</em>函数都有<em>一个</em>入口地址,该入口地址就是函数<em>指针</em>所指向的地址。有了指向函数的指 针变量后,可用该<em>指针</em>变量调用函数,就如同用<em>指针</em>变量可引用其他类型变量一样,在这些概念上一致的。 数据类型
C++ new一个数组时,指针移动程序崩溃问题
<em>问题</em>代码:#include using namespace std; int main(){ int a[] = { 12, 42, 6, 17, 32, 4, 19 }; int *pia = <em>new</em> int[7]; for (size_t i = 0; i < 7; ++i){ pia[i] = a[i]; } for (size_t i = 0; i < 6;++i){
C++试题及答案
一、 选择题(每小题1.5分,合计25分) 1、 C++对C语言作了很多改进,下列描述中( )使得C语言发生了质变,从面向过程变成了面向对象。 A、增加了一些新的运算符; B、允许函数重载,并允许设置缺省参数; C、规定函数说明必须用原型; D、引进了类和对象的概念; 2、 所谓数据封装就是将一组数据和与这组数据有关<em>操作</em>组装在一起,形成<em>一个</em>实体,这实体也就是( )。 A.类 B.
C语言中指针定义的时候初始化的必要性
<em>定义</em><em>一个</em><em>指针</em>时,不进行初始化,系统会为这个变量自动分配<em>一个</em>地址,这个地址的值就是<em>指针</em>的值可能为0X1234,不初始化这个<em>指针</em>的值的话,<em>操作</em>这个<em>指针</em>就想当于<em>操作</em>这个0X1234这个地方的内容,就会出现<em>问题</em>,因为你并不知道这个<em>指针</em>指向地址的内容,可能为段系统代码,错改的话,可能会让系统崩溃。 比如 int *p; *p=100;让p这个<em>指针</em>指向地址的值为100,有可能这个<em>指针</em>指向地址的值为系统的<em>一个</em>重...
关于c语言中double指针的初始化问题
今天在写一到题目时遇到了一些double类型<em>指针</em>的<em>问题</em> 当<em>定义</em>double*a;时编译给了waring,说是没有给<em>指针</em>初始化,而<em>定义</em>int*a;则不会出现此<em>问题</em>。 然后我就去初始化,刚开始理解错了,用了*a=123;来初始化,继续waring,然后明白要初始化的是<em>指针</em>,最后给<em>指针</em>赋了初始地址值没waring了。
new出来的对象一定要delete
很多时候,我们会通过<em>new</em>构建<em>一个</em><em>指针</em>对象:分配内存和调用构造函数。我们知道<em>new</em>和delete一定要配套使用,并且<em>new</em> []和delete []配套使用。但是有些时候,并不知道<em>什么</em>时候<em>需要</em>delete 掉<em>new</em>分配的空间。如以下伪码:
C++中指针初始化和使用注意事项
在C++中<em>指针</em>经常会出错,有时候<em>定义</em>了<em>指针</em>没有初始化直接使用,或者是<em>定义</em><em>指针</em>的时候,将<em>指针</em>置成NULL,但是后面直接对<em>指针</em>进行<em>操作</em>,这样程序也会出错。对于任何<em>指针</em><em>定义</em>之后,都要对齐进行初始化。 初始化有几种: 1)<em>定义</em>之后置为NULL,这样可以防止<em>指针</em>错误地指到我们不知道的内存,如果后面程序中对这个<em>指针</em><em>指针</em>进行<em>操作</em>,系统会报出错误。一般<em>定义</em><em>指针</em>后如果不对其进行初始化,其指向是不确定的。 in
初始化指针是否需要分配内存空间
初学<em>指针</em>,不知道声名<em>指针</em>或者声名对象时为<em>什么</em>要用<em>new</em>来分配内存空间,如以下代码:   int *a ; int b = 2; a = &b; cout<<<<<*a;运行时编译器会报错,为<em>什么</em>呢?   简单来讲,我们没有为int 型<em>指针</em>p开辟内存空间(
C语言 结构体指针需要申请内存但函数定义指针需要申请
在函数<em>定义</em><em>指针</em>或者变量已经为<em>指针</em>本身和变量本身分配了内存所以用<em>指针</em>指向<em>一个</em>已经<em>定义</em>的变量时不需再分配内存 但是数据结构中用<em>指针</em>指向结构体时只为<em>指针</em>本身分配了内存如果要对结结构体填入内容就要分配<em>一个</em>结构体大小的内存才可以 但只自己分配的内存一定要养成用free()的好习惯
C++中为什么要用指针,而不直接使用对象?
<em>问题</em>描述 我刚从 Java 转到使用 C++ 进行面向对象开发,我发现<em>一个</em>很让我非常困惑的<em>问题</em>:C++ 中经常出现使用对象<em>指针</em>,而不是直接使用对象本身的代码,比如下面这个例子: C++ 1Object *myObject = <em>new</em> Object;而不是使用:C++
关于数组指针和指向数组指针指针及其new
今天在CSDN上看到了wp123456xt对我很久以前的一篇文章——方正面试的题-找出字符串最多的分解方法http://blog.csdn.net/shizhixin/article/details/4742687的评论,很高兴有人能够提出<em>问题</em>,正好今天有时间,所以回复了。 后来在wp123456xt的CSDN的博文上看到他的一篇求助文章——数组<em>指针</em><em>问题</em>(求指教),http://blog
c语言 什么时候需要动态分配内存?
我讲解一下c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为<em>什么</em>要通过函数来实现动态分配内存呢?系统难道不是会自动分配内存吗?? 既然有人会问这样的<em>问题</em>,那么我在这里好好的讲解一下吧! 首先让我们熟悉一下计算机的内存吧!在计算机的系统中有四个内存区域: 1)栈:在栈里面储存一些我们<em>定义</em>的局部变量以及形参(形式参数); 2)字符常量区:主要是储存一些字符常量,比如:char
C/C++,指针定义和使用
概述 C语言中的<em>指针</em>是专门用来存放内存地址的变量。每个指都有<em>一个</em>与之相关联的数据类型,该类型决定了<em>指针</em>指向的数据的类型。 C语言中使用*把<em>一个</em>标识符声明为<em>一个</em><em>指针</em>,<em>指针</em><em>定义</em>的一般形式为: 数据类型 *<em>指针</em>变量名; 例如: char *pc; int *pi; doule *pd = NULL; 第三行<em>定义</em>了<em>一个</em><em>指针</em>并初始化为NULL,表示该指
C++:在构造函数中使用new时应该注意的事项
C++:在构造函数中使用<em>new</em>时应该注意的事项标签(空格分隔): c++ 如果在构造函数中使用了<em>new</em>初始化<em>指针</em>对象,那么应该在析构函数中使用delete释放对象。 <em>new</em>和delete必须相互兼容,<em>new</em>对应于delete,<em>new</em>[]对应于delete[]。 如果有多个构造函数,则必须以相同的方式使用<em>new</em>。然而,可以在<em>一个</em>构造函数中使用<em>new</em>初始化<em>指针</em>,而在另<em>一个</em>构造函数中将其初始化为空(0、N
什么时候使用指针什么时候使用引用?什么时候应该按值传递?
何时使用引用参数 使用引用参数的主要原因有两个: (1)程序员能够修改调用函数中的数据对象。 (2)通过传递引用而不是整个数据对象,可以提高程序的运行速度。 <em>什么</em>时候使用<em>指针</em>?<em>什么</em>时候使用引用?<em>什么</em>时候应该按值传递? 下面是一些指导原则:     对于那些函数,它们只使用传递过来的值,而不对值进行修改。         (1)如
何时让指针变量指向用malloc新分配的一块内存?
<em>定义</em><em>指针</em>,有时是为了接收函数的返回值,如DIR* opendir (const char * path ),<em>需要</em><em>定义</em><em>一个</em>DIR<em>指针</em>接收返回值;有时是作为函数的实参传入,如int lstat(const char *path, struct stat *buf),<em>需要</em><em>定义</em><em>一个</em>struct stat<em>指针</em>传入。前者只需将NULL赋值给<em>指针</em>,DIR *dir = NULL,因为该函数返回的是<em>一个</em>已经被
链表添加函数中为什么要用指向链表指针指针
在看书的时候有个函数往链表里添加节点,代码中考虑到可能给出的头<em>指针</em>为空,并做另外一些处理。具体代码如下: #include #include using namespace std; struct ListNode { int val; ListNode* next; }; void AddToTail(ListNode** pHead, int value); int m
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加加中的数组与指针-基础语法
首先先给上代码#include using namespace std;void sz_1() { const int maxsize = 100; int const maxsize1 = 50; cout<<<<<<<endl;}void sz
C++的指针的坑:“new[]的指针需要delete[]”和“子类指针可以转父类指针”的两条规则成功的冲突到了一起
原文地址:http://www.cppblog.com/vczh/archive/2013/04/27/199765.html posted on 2013-04-27 17:24 陈梓瀚(vczh)  C++的<em>指针</em>的坑。剩下的坑留到下一篇文章里面。下面要讲的这个坑,如果不是在粉丝群里面被问了,我还不知道有人会这么做: class Base { ... }
C语言指针初始化与NULL时作为实参传入函数中出现的问题
先看一段代码:void function(int * exp) { ............. } int main(int argc ,char * argv[]) { int *tmp = NULL; function(tmp); ......... return 0; } 笔者测试过,无论在function中怎么最tmp进行<em>操作</em>,都不会...
Self Summary: C++函数返回引用和指针问题,局部对象与new对象的问题
C++的局部对象的概念: 作用域在局部范围内(例如函数)的对象。这样的对象可以把对象的引用或者<em>指针</em>存在栈中,随着函数的结束而销毁,而把创建的对象内容存在堆中。如果<em>需要</em>在堆上创建对象,要么使用<em>new</em>运算符,要么使用malloc系列函数。 而关键是理解好“自动存储”的概念[1]: Object obj; 此时,obj是在栈上分配的吗? 要回答这个<em>问题</em>,我们首先要理解这个语
C/C++ — 浅析C++的强制类型转换
C++的强制类型转换
指针在子函数中分配空间若干问题
如果想要在子函数中为<em>指针</em>分配空间,那么参数应该是<em>指针</em>,还是<em>指针</em>的引用呢?0、知识储备:<em>指针</em>与cout#include #include #include using namespace std;int main() { int b=1; int *a=&b; cout<<<<&a
非模态对话框的指针释放的理解
最近项目
C语言中“指针”作为“函数参数”时的注意事项
C语言中“<em>指针</em>”作为“函数参数”时的注意事项
指针和未初始化的指针的区别
================================================================================ 空<em>指针</em>的简单描述: 它 “与任何对象或函数的<em>指针</em>值都不相等”。也就是说, 取地址<em>操作</em>符 & 永远也不能得到空<em>指针</em>, 同样对 malloc() 的成功调用也不会返回空<em>指针</em>, 如果失败, malloc() 的确返回空<em>指针</em>, 这是空<em>指针</em>
结构(struct)指针详解
这篇文章是九九年写的,这篇文章适合中级程序员。有不明白之处不要紧,多看几遍,然后花些时间上机<em>操作</em>及认真思考每个<em>问题</em>。遇到难题要研究、解决,难题出现于哪里?该用<em>什么</em>方式来解决?为<em>什么</em>要选择这个方式解决?有其它的解决方法吗?这样的解决方案完美吗?其实做个程序员这些基本的思考心得是要掌握的。记住;遇<em>问题</em>不要逃避,要面对现实、勇于挑战,仔细研究难题的所在,这样相信你会成功的!   <em>指针</em>结构与<em>指针</em>的关
c++ 用new后delete,而继续输出指针后果
c++ 用<em>new</em>后delete,而继续输出<em>指针</em>后果 1 #include&amp;lt;iostream&amp;gt; 2 #include&amp;lt;cstring&amp;gt; 3 #include &amp;lt;string.h&amp;gt; 4 5 int main(){ 6 7 int *a =<em>new</em> int[100]; 8 for(int ...
定义指针不分配内存
#include #include //分配内存时用到的头文件 void main() { int a=20,*p; //这里<em>定义</em>了<em>一个</em>整型<em>指针</em>,但没赋初值,这时我们叫这个<em>指针</em>为野<em>指针</em> printf("%d->%p\n", a, p); //观察%p是输出<em>一个</em>地址数据 p=NULL; printf("%d->%p\n", a, p);
什么时候用指针形参?什么时候用引用形参?
0.在作为参数的作用中<em>指针</em>和引用的共同特点是都可以在函数中改变实参对象,标准 C 中是没有引用形参的,只能使用<em>指针</em>形参。1.就函数参数传递数值而言,传递<em>指针</em>与传递引用唯一的优势是避免拷贝,同时带来实参被改变的风险,但是可以通过const来尽量避免。2.就为改变实参这个目的而言,<em>指针</em>对于引用的优势在于当你有可能<em>需要</em>传入<em>一个</em>空的概念*(尚未创立的对象,空<em>指针</em>可以表示,而引用无法表示空的概念)的时候,<em>指针</em>
一个单向链表,不知道头节点,一个指针指向其中一个节点,问如何删除这个指针指向的节点?
将这个节点复制成下<em>一个</em>节点的值,然后删除下<em>一个</em>节点  node *p; // 当前节点 node *q; q = p -> next; p.data = q.data; // 复制q节点到p p -> next = q -> next; // 删除q free(q);
函数中的指针分配的内存怎么释放
 被调用函数里动态分配的内存要不要手动释放 20 我想手动释放来着,但是<em>指针</em>是在被调用函数里声明的,在调用函数里释放不了。 我的被调用函数返回的就是这个<em>指针</em>,我也不能在被调用函数里释放。   你指的“动态分配”是系统自动分配内存,如 char c[100]; 还是手动分配的,如 char *p = (char *)malloc(100); 如果是第一种方式
使用全局的指针变量
<em>指针</em>
什么情况下使用指针的引用(指针
在函数调用时 用<em>指针</em>或者引用做参数,表示把变量的地址传递给子函数,但是子函数只能修改<em>指针</em>所指变量的值,并不能修改<em>指针</em>的指向。 如果想用修改<em>指针</em>的指向,就要用<em>指针</em>的<em>指针</em>,或者<em>指针</em>的引用。 大部分<em>情况下</em>,用<em>指针</em>和引用做参数,只是想要修改<em>指针</em>所指变量的值,并没有想修改<em>指针</em>的指向。 但是如果<em>指针</em>所指的这块内存在调用子函数结束之后发生了改变,那就要用<em>指针</em>的引用或者<em>指针</em>的指
C++指针释放问题
今天看到了<em>一个</em><em>问题</em>,其实在项目中也经常遇到<em>指针</em>释放的<em>问题</em>,先看看<em>一个</em>简单的<em>指针</em>释放的<em>问题</em>: **************************************<em>问题</em>如下: (1)一般在c++类中有成员<em>指针</em>的话,会在类的析构函数里释放(delete)这个<em>指针</em>? (2)基于(1),如果传给这个成员<em>指针</em>不是<em>一个</em>堆分配的<em>指针</em>,那类发生析构会发生错误,这个怎么解决?? 如下: class A {
C/C++ 子函数返回局部变量、指针 和改变指针指向
1>子函数返回局部变量 例子1: 上面的简单程序,大家应该都知道应该会输出<em>什么</em>。是的,输出如下图: 引出的思考:子函数doubletimes()中的返回变量k是局部变量,返回到主函数后该变量超出了作用域,已经被销毁了,为<em>什么</em>主函数中的变量m还会等于20呢? 引出的结论:C语言中参数的传递(包括输入参数和返回参数)实质上都是传递的参数的拷贝。 在上面例子中,子函数返回值k=
C语言中的指针以及二级指针
很多初学者都对C中的<em>指针</em>很迷糊,希望这篇blog能帮助到大家: 1.<em>什么</em>是“<em>指针</em>”: 在执行C程序的时候,由于我们的数据是存储在内存中的。所以对于C程序本身来说,如果想找到相应被调用的数据,就要知道存储该数据的内存地址是多少,换言之,C程序通过已知的内存地址到相应的内存位置存储数据。 这里简单说一下内存管理(对于初学者来说。为了避免专业术语引发的理解<em>问题</em>,下面的叙述尽量避免专业<em>定义</em>:),对于
使用C语言实现给字符串去重
        这段时间在复习C语言编程的时候,有一位童鞋请我帮忙给他写<em>一个</em>字符串去重的函数,于是便花了一些时间研究了下有关于字符串去重的<em>问题</em>。       其实有关于C语言<em>操作</em>字符串,本身我感觉就是C语言的灵魂,C的存在就是为了<em>操作</em>内存,而不是使用C++、java等所谓高级语言的使用类似容器的<em>操作</em>实现去重的方法,所谓人家的接口,就是会调用就可以了,所以一些java程序员就开始各种鄙视C程序员,我...
指针定义和初始化
每个<em>指针</em>都有<em>一个</em>与之关联的数据类型,该数据类型决定了<em>指针</em>所有指向的对象的类型。例如,<em>一个</em>int 型<em>指针</em>只能指向 int 型对象。 1.<em>指针</em>变量的<em>定义</em>      C++语言使用 * 号把<em>一个</em>标识符声明为<em>指针</em>:              vector   *pvec;         int        *p1, *p2;         string    *pstri
第3章 类与对象 习题
一填空题(1) 类<em>定义</em>中关键字private.public 和protected 以后的成员的访问权限分别是  私有   、    公有     和      保护     。如果没有使用关键字,则所有成员默认<em>定义</em>为  private  权限。具有   public   访问权限的数据成员才能被不属于该类的函数所直接访问。(2)<em>定义</em>成员函数时,运算符“::”是   作用域  运算符,“MyClas...
关于delete释放指针要注意的问题
delete的时候,系统只是将<em>指针</em>指向的堆空间回收,但是没有将<em>指针</em>变量 的值赋值为null,也就是说<em>指针</em>还是指向原来的堆空间,但是这个空间已经失效 所以delete<em>一个</em><em>指针</em>以后要马上将它赋值为null 不然容易导致野<em>指针</em>的出现
C++常见问题总结_拷贝控制(拷贝、赋值、销毁)
当我们<em>定义</em><em>一个</em>类时,我们显示或隐式地指定在此类型对象拷贝、赋值和销毁时做<em>什么</em>。 <em>一个</em>类通过<em>定义</em>五种特殊的成员函数来控制这些<em>操作</em>,包括:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符和析构函数。 拷贝和移动构造函数<em>定义</em>了当用同类型的另<em>一个</em>对象初始化本对象时做<em>什么</em>。拷贝和移动赋值运算符<em>定义</em>了将<em>一个</em>对象赋予同类型的令<em>一个</em>对象时做<em>什么</em>,析构函数<em>定义</em>了当此类型对象销毁时做<em>什么</em>。 在本片文章...
关于全局变量的初始化问题与野指针
今天遇到<em>一个</em>小<em>问题</em>,声明<em>一个</em>全局的<em>指针</em>变量p1,并且通过malloc动态分配内存的方法,将<em>一个</em>1000Byte内存的首地址赋给p1,代码:char* p1=malloc(1000); 如下图: 但是使用 gcc 命令编译后报出如下错误(使用C99标准) 看了别人的博客后才知道是如下原因: c99标准中规定:全局变量和static变量的初始化<em>需要</em>指定<em>一个</em>常量,不能是<em>一个</em>非常量的表
C指针+ STM32 理解
环境:IAR + Cortex-M3的处理器 关注:<em>指针</em>在寄存器层次上的存储、调用、使用等。。。 示例代码如下: int yyy=16; int *ptr1 = &yyy; int **ptr2 = &ptr1; int (*ptr3)[3]; int *(*ptr4)[4]; int main() { ................ //使用这几个变量 .
何时使用或何时不使用malloc函数
在初学数据结构时,我们往往不太清楚在<em>定义</em><em>一个</em>结构体<em>指针</em>时要不要使用malloc函数。 例如以下的代码:LINKLIST *init linklist() { LINKLIST *H=NULL; LINKLIST *S; int x; printf("请输入链表元素 或以-1结束输入") while(x!=-1) { s=(LINKLIST*
C语言 用汇编来看看变量和指针实现
Makefile print:aa ./aa aa: aa.o gcc -g -o aa aa.o aa.o: aa.c gcc -g -c aa.c #include     int main(
定义异常类(理解)
自<em>定义</em>异常类在java里面实际上针对于可能出现的公共的程序<em>问题</em>,都会提供相应的异常信息,但是很多时候这些异常信息往往不够去使用的,例如:现在进行加法处理的时候,如果发现两个内容的相加结果为30,那么就应该抛出<em>一个</em>AddException的异常。但是这种异常Java是不会提供的,所以就必须<em>定义</em><em>一个</em>属于自己的异常类  如果想要<em>定义</em>属于自己的异常类可以继承两种父类:Exception(必须处理)、Run...
c++里面创建对象,什么时候应该用new什么时候应该直接创建?
<em>什么</em>时候用哪一种来创建对象比较好呢? <em>new</em>以下情况可以使用 1 申请对象数量不确定时 2 <em>需要</em>空间较大时 3.动态的<em>new</em>,非动态的不用<em>new</em>, 比如读文件的时候 你可以<em>定义</em><em>一个</em>数组 BYTE pBuff[4000*1024]; 用来存放文件数据 这样如果文件很小就会浪费内存空间,文件很大则文件数据不能全部读出 所以在读文件的时候<em>需要</em>根据文件的si
【七】C++一些新的关键字 -- new、delete、强制类型转换
1、动态内存分配C++中的动态内存分配已经和C语言有了明显区别: C++中通过<em>new</em>关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 delete关键字用于内存释放   变量申请和释放:Type* pointer = <em>new</em> Type; // …… delete pointer;  数组申请和释放:Type* pointer = <em>new</em> Type[N]; // …… delete[
常见动态内存分配malloc()/free()、new/delete使用方法及常见错误
1.动态内存分配的几种方式 ①从静态存储区分配内存,内存在编译时已经分配好了,这块内存在整个程序运行期间都存在,比如全局变量 ②从栈上分配内存,函数体结束时,栈内存自动销毁,比如局部变量 ③从堆上开辟内存,比如malloc()/<em>new</em> 2.malloc()和free()的使用方法 malloc()/free()用来动态分配内存,使用方法如下: void *malloc(siz...
采用new运算符创建一个指向二维数组的指针的两种方式
C++中引入了<em>new</em>运算符,用于动态地申请空间。现简单解析其用法。 一、创建单个元素 (1) char * p = <em>new</em> char;     这种方式申明了<em>一个</em>指向<em>一个</em>字符空间的<em>指针</em>变量;然而,这个字符空间中存储<em>什么</em>内容这条语句并没有给出,即没有给这个字符空间初始化。        (2)char * p = <em>new</em> char();    这种方式先申明了<em>一个</em>指向<em>一个</em>字符空间的<em>指针</em>变量
Map对象指针和Map.clear()
这两天调试项目的接口,2个接口都出现错误,<em>问题</em>排查很繁琐。但是排查出<em>问题</em>之后,发现出现的<em>问题</em>很逗比。记录下来纪念下逗比的程序之路先上2段代码: 代码1 Map <em>new</em>map =null; for(Map map :listmap){ <em>new</em>map =<em>new</em> HashMap<Stri
【C】指针必须初始化吗??
<em>定义</em><em>一个</em><em>指针</em>可以不用初始化,但是在使用<em>指针</em>时一定要确定它是否被初始化即是否指向了某<em>一个</em>确定的可访问的内存位置。 如:int* p;//<em>定义</em><em>一个</em>整型<em>指针</em>此时可以不初始化,但它的指向是不确定的可能指向了系统中某一重要的内存位置。 int a; p=&amp;amp;a;//将p指向变量a,此时p的指向是确定的 当对p进行解引用时如*p=20此时就要看看p的指向是否已确定。由于上面我们将p指向了a变量所在内存位...
const与指针及初始化
const是<em>一个</em>C语言的关键字,它限定<em>一个</em>变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性 指向常量的<em>指针</em>: const int *pa; int const *pa; 两者等价。因为指向常量的<em>指针</em>有时候会指向常量,所以它具有这个性质:“不能靠解引用改变它指向的对象的值”,以此保护它所指向的常量的常量性: *pa =d; // 不可行(d是已经声明过的整型
C语言的指针兼容性讨论
C语言的<em>指针</em>兼容性讨论 <em>指针</em>之间的赋值比数值之间的赋值要严格。把const<em>指针</em>赋值给非const<em>指针</em>是不安全的,因为这样可以使新的<em>指针</em>改变const<em>指针</em>指向的数据。编译器在编译代码时,可能会给出警告,执行这样的代码是未<em>定义</em>的。但是把非const<em>指针</em>赋值给const<em>指针</em>没<em>问题</em>,**前提是只进行一次解引用。但是进行两级解引用时,这样的赋值也是不安全的。**
new创建类对象与直接定义的区别
<em>new</em>创建对象的特点 <em>new</em>创建类对象<em>需要</em><em>指针</em>接收,一处初始化,多处使用<em>new</em>创建类对象使用完需delete销毁<em>new</em>创建对象直接使用堆空间,而局部不用<em>new</em><em>定义</em>类对象则使用栈空间<em>new</em>对象<em>指针</em>用途广泛,比如作为函数返回值、函数参数等频繁调用场合并不适合<em>new</em>,就像<em>new</em>申请和释放内存一样 <em>new</em>创建类对象实例 1、<em>new</em>创建类对象例子: CTest* pTest = <em>new</em>
C++运算符重载(3) - 什么时候需要定义赋值操作
答案与拷贝构造函数一样。如果<em>一个</em>类不包含<em>指针</em>,则不<em>需要</em>自<em>定义</em>赋值<em>操作</em>符与拷贝构造函数。编译器会给每个类创建<em>一个</em>默认的拷贝构造函数和默认的赋值<em>操作</em>符。但是,当类中包含有<em>指针</em>或任何运行时分配的资源时,编译器生成的这两个函数,可能会失效。 参考下面程序: #include using namespace std; // 没有自<em>定义</em>赋值<em>操作</em>符 class Test { int *ptr;
C/C++指针数组的问题
本人小白,本文专门给初学者准备,大神自动跳过。 不喜勿喷,谢谢。 如有错误,请指正,谢谢。 正文: 进来有人问我一些有关于<em>指针</em>的<em>问题</em>。在此我贴出<em>问题</em> <em>问题</em>如下: char *msg[5] = {"Thank you","You are"}; mian() { printf("%s",msg[0]); } <em>问题</em>一:为<em>什么</em>msg[0]可以输出Thank you? <em>问题</em>二
读《C程序设计语言》2E-3 [4~6]章
2016.02.22 - 04.05读《C程序设计语言》2E-3 [1~3]章1 练习02.22函数与程序结构练习4-1编写函数strrindex(s, t),它返回字符串t在s中最右边出现的位置、如果s中不包含t,则返回-1。[1] 打算 简单打算如下: [2] 实现 简单实现[1]中打算如下:/* p4_1.c * 编写函数strrindex(s, t) - * 它返回字符串t在s中最右边出
C++之返回数组指针
因为数组不能被拷贝,所以函数不能返回数组。不过函数可以返回数组的<em>指针</em>或者引用,今天我们一起来学习下C++下的几种返回数组<em>指针</em>的方法 一、类型别名 这是返回数组<em>指针</em>最直接的一种方法了 #include&lt;iostream&gt; using namespace std; typedef int arrT[10];//类型别名,表示含有10个整形的数组 //using arrT ...
需要知道关于C语言指针的一切
Everything you need to know about pointers in C 你<em>需要</em>知道关于C语言<em>指针</em>的一切 <em>指针</em>的<em>定义</em> <em>指针</em>是内存地址。 (嗯,简短的段落。) 开始 假设你声明<em>一个</em>名为foo的变量。 int foo; 这个变量占用一些内存。 在当前主流的Intel处理器上,它占用四个字节的内存(因为int是四个字节
关于一个类中使用自己(类对象或类指针
1.首先关于<em>定义</em>类时能不能用自己的类对象
C语言指针(关于定义指针为NULL)深入了解
C语言<em>指针</em>中: <em>指针</em>是C语言最重要的概念之一,用于储存变量的地址。 &amp;amp;是取地址运算符,*是间接运算符。(C语言中:%p是输出地址的转换说明)。 “*号在<em>定义</em>变量时,表示类型是<em>指针</em>,如 int *p = NULL 表示这是<em>一个</em>叫p的<em>指针</em>; *号在运算时,表示取<em>指针</em>指向地址的内容。 首先要说的是:非堆分配的内存是不<em>需要</em>free的。 再说p=NULL;<em>指针</em>的变化是 p指向了<em>一个</em>地址为0的内存,这...
C++指针、空指针、野指针使用的一些总结
野<em>指针</em>野<em>指针</em>:未被初始化的<em>指针</em>,野<em>指针</em>所导致的错误和迷途<em>指针</em>非常相似,但野<em>指针</em>的<em>问题</em>更容易被发现。空<em>指针</em>空<em>指针</em>:就是<em>一个</em>被赋值为0的<em>指针</em>,它不指向任何的对象或者函数。1、使用<em>指针</em>的第一件事就是<em>需要</em>看这个<em>指针</em>是否是空<em>指针</em>(坚决不能使用空<em>指针</em>,否则程序就会蹦。意思就是:为<em>一个</em><em>指针</em>赋值为空<em>指针</em>是不会报错的:char*p;但是在使用的时候一定要判断是否为空<em>指针</em>(即该<em>指针</em>有没有指向),不为空才能<em>操作</em>)判断空...
C++指针delete后还要置为null
众所周知,最开始我们用<em>new</em>来创建<em>一个</em><em>指针</em>,那么等我们用完它之后,一定要用delete将该<em>指针</em>删掉。但是,值得注意的是,难道就仅仅是删除这个<em>指针</em>这么简单的么?下面,我们用<em>一个</em>程序来说明这个<em>问题</em>:[cpp] view plain copy#include &amp;lt;iostream&amp;gt;  using namespace std;  int main()   {      int *p=<em>new</em> in...
1.01一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?
<em>一个</em>单向链表,不知道头节点,<em>一个</em><em>指针</em>指向其中的<em>一个</em>节点,问如何删除这个<em>指针</em>指向的节点? 将这个<em>指针</em>指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。
指针申请空间
以下是经典程序(载自林锐的从c/c++高质量编程),讲解的部分是我个人理解void GetMemory(char *p,int num) { p=(char*)malloc(sizeof(char)*num); //p是形参指向的地址 } void main() { char *str=NULL; GetMemory(str,100); //str是实参指向的地
定义函数中返回值为指针问题(1)
前几天做课设的时候写了两个测试函数,发现了很奇怪的<em>问题</em>。通过最近查阅资料,总结了<em>问题</em>的所在。 第一次测试代码 #include #include #include char *fanhui() { char name1[300]="李四/student.txt"; char *p = name1; return p;
oc中对指针、对象和%@符号的理解
我们知道c语言中对于<em>指针</em>的<em>操作</em>是可以直接通过打印<em>指针</em>而得到对象的地址的,如下:char *s = “abc”; printf(“s的值:%s”,s); printf(“s的地址:%p”,s); 打印结果为:s的值:abc s的地址:0x107f3ced8 我们知道s其实是指向数据常量区“abc”的<em>一个</em><em>指针</em>,我们可以通过*s来获取字符串的值:printf(“首字符为:%c”,*s); 打印结
使用智能指针的注意事项
1. 使用unique_ptr以替代auto_ptrauto_ptr是C++98标准库提供的<em>一个</em>智能<em>指针</em>,但已被C++11明确声明不再支持。auto_ptr具有以下缺陷: * auto_ptr有拷贝语义,拷贝后源对象变得无效,这可能引发很严重的<em>问题</em>;而unique_ptr则无拷贝语义,但提供了移动语义,这样的错误不再可能发生,因为很明显必须使用std::move()进行转移。#include <i
析构函数是否必须为虚函数?什么情况下才应该定义析构函数为虚函数?
多态是面向对象的<em>一个</em>基本属性,包括静态多态(编译阶段)和动态多态(运行阶段),静态多态主要是指函数参数不同产生的多态性,是在编译阶段可以识别的一种多态机制,而运行时多态则主要用于基类<em>指针</em>指向派生类对象时,可以通过基类<em>指针</em>直接调用派生类的对象函数,当然这种多态是通过虚函数实现的。 虚函数的目的就是通知系统在函数调用时能够自动识别对应的类对象类型,从而能够根据<em>指针</em>所指类型调用对应的类对象,实现函数调
new和delete 基类指针指向继承类的对象时,delete的过程
释放指向派生类对象的基类<em>指针</em>
C语言基础——字符串指针(指向字符串的指针
C语言中没有类似java,python等面向对象的编程语言中string那样的特定的字符串类型,通常是将字符串放在<em>一个</em>字符数组中。 遍历字符串代码: #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;string.h&amp;gt; void main(){ char str[] = &quot;hello world&quot;; int len = strlen(str),i; ...
QT技巧 - QT中如何确定new对象是否要释放
QT技巧 - QT中如何确定<em>new</em>对象是否要释放 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:12951803 目录 QT技巧 - QT中如何确定<em>new</em>对象是否要释放 1.前言 2.QT的自动释放机制 3.结论 环境: QT版本:5.6.2 基础内容阅读: QT基础 - QObject简介 1.前...
C++函数返回指针结果的坑.
可能被java惯坏了, 这个坑居然踩过两次,特意备注下:      以下<em>一个</em>MAT转IplImage的例子: Mat srcImage = imread("1.jpg"); IplImage* lvRet = &IplImage(srcImage); cvShowImage("aa", lvRet);    运行之,没<em>问题</em>的,可以显示图像 。  但是, 将转换函数放在<em>一个</em>独立的函数里面就不
【linux c】什么是野指针以及如何避免野指针_学习笔记_010
1.首先以<em>一个</em>示例来认识野<em>指针</em>: #include int main() { int * p; scanf("%d", p); printf("%d\n", * p); return 0; } 该段程序编译并未报任何错误,而运行之后,输入具体值后,报段错误: 2 段错误   为<em>什么</em>会出现段错误? 因为此处<em>定义</em>了<em>一个</em>局部变量
指针出现的三种情况
野<em>指针</em>在下面三种<em>情况下</em>会出现: 1.<em>指针</em>未初始化 <em>指针</em>变量在<em>定义</em>时不会自动初始化成空<em>指针</em>,而是随机的<em>一个</em>值,可能指向任意空间,这就使得该<em>指针</em>成为野<em>指针</em>。因此<em>指针</em>在初始化时要么指向<em>一个</em>合理的地址,要么初始化为NULL。 2.<em>指针</em>指向的变量被free或delete后没有置为NULL 在调用free或delete释放空间后,<em>指针</em>指向的内容被销毁,空间被释放,但是<em>指针</em>的值并未改变,仍然指向这块内存...
指针数组&数组指针的分配内存及函数参数 C语言版
最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了。所以下定决心一定要弄清楚这个<em>问题</em>,然后不好的是网上的资料总是解决的并不清楚,总是在纠结<em>什么</em>是<em>指针</em>数组<em>什么</em>是数组<em>指针</em>,看了《C缺陷和陷阱》也没有我想要的东西。要么就是C和C++混为一谈,<em>new</em> int[5]这种语法C肯定是错误的,所以找个机会总结一下,然后希望以后不要再栽在基础上。<em>定义</em><em>指针</em>数组:int p[10] 数组<em>指针</em> int(*p)[5]
什么时候需要重载拷贝构造函数(赋值运算符)!
在C++中,下面三种对象<em>需要</em>调用拷贝构造函数:     1) <em>一个</em>对象以值传递的方式传入函数体;     2) <em>一个</em>对象以值传递的方式从函数返回;     3) <em>一个</em>对象<em>需要</em>通过另外<em>一个</em>对象进行初始化;          如果在前两种情况不使用拷贝构造函数的时候,就会导致<em>一个</em><em>指针</em>指向已经被删除的内存空间。对于第三种情况来说,初始化和赋值的不同含义是构
使用new时的初始化问题
变量<em>定义</em>及使用<em>new</em>时的初始化<em>问题</em>_崔增旺_新浪博客 http://blog.sina.com.cn/s/blog_4a632b4d0101d25r.html     在使用<em>new</em>分配内存单元时,一般希望新分配的单元能被初始化为全0。注意以下两条语句:  C++ Code  1 2 int *ptrInt1 
C语言-指针操作
0.引入 在C语言中,
typedef 定义函数指针(匿名函数)
原文地址:<em>定义</em>函数<em>指针</em>" href="http://blog.sina.com.cn/s/blog_5423100e010007jz.html" target="_blank" style="color:rgb(51,102,153); text-decoration:none">typedef <em>定义</em>函数<em>指针</em>作者:兰音 http://blog.sina.com.cn/s/blog_54231
jquery/js实现一个网页同时调用多个倒计时(最新的)
jquery/js实现<em>一个</em>网页同时调用多个倒计时(最新的) 最近<em>需要</em>网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞<em>一个</em>哦! //js //js2 var plugJs={     stamp:0,     tid:1,     stampnow:Date.parse(<em>new</em> Date())/1000,//统一开始时间戳     ...
中国移动研究院大云系统ppt下载
此PPT是针对中国移动的大云平台进行讲解,解说了云计算平台 相关下载链接:[url=//download.csdn.net/download/rosemaryzhou/2318364?utm_source=bbsseo]//download.csdn.net/download/rosemaryzhou/2318364?utm_source=bbsseo[/url]
极品时刻表源码C++下载
极品时刻源码,用C++开发,包括源码,成品。 相关下载链接:[url=//download.csdn.net/download/nmboy318/2441699?utm_source=bbsseo]//download.csdn.net/download/nmboy318/2441699?utm_source=bbsseo[/url]
数据结构线性表的源代码(严蔚敏c语言版)下载
第一章线性表的基本操作的源代码和顺序和链式两种存储结构两个有序表的合并 相关下载链接:[url=//download.csdn.net/download/dbxyq/2486117?utm_source=bbsseo]//download.csdn.net/download/dbxyq/2486117?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 问什么学习java 云计算需要学什么
我们是很有底线的