Error

#Error

#

关于用delete删除二维数组

char *szSubFrame[64] ={0};
        char *word;
        int i, numString = 0;
        char *sep = "$\0\r\n";
        for(i=0, word = strtok(szBuff, sep);
                word != NULL;
                word = strtok(NULL, sep), i++)
        {
                szSubFrame[i] = new char[strlen(word)+1];
                memcpy(szSubFrame[i], word, strlen(word));
                numString++;
        }

       

        对于上述的代码,如何用delete删除动态建立的数组

        for(i=0; i<numString; i++)
        {
                delete []szSubFrame[i];
        }

        这个可以吗?

posted @ 2009-10-07 20:45 Error 阅读(924) | 评论 (0)编辑 收藏

关于strtok函数

#include <string.h>
#include <stdio.h>

int main(void)
{
   char input[16] = "abc,dhh,eee";
   char *p;

   /* strtok places a NULL terminator
   in front of the token, if found */
   p = strtok(input, ",");
   if (p)   printf("%s\n", p);

   /* A second call to strtok using a NULL
   as the first parameter returns a pointer
   to the character following the token  */
   p = strtok(NULL, ",");
   if (p)   printf("%s\n", p);

   p = strtok(NULL, ",");
   if (p)   printf("%s\n", p);
   return 0;
}

MSDN上的原话:
On the first call to strtok, the function skips leading delimiters and returns a pointer to the first token in strToken, terminating the token with a null character. More tokens can be broken out of the remainder of strToken by a series of calls to strtok. Each call to strtok modifies strToken by inserting a null character after the token returned by that call. To read the next token from strToken, call strtok with a NULL value for the strToken argument. The NULL strToken argument causes strtok to search for the next token in the modified strToken. The strDelimit argument can take any value from one call to the next so that the set of delimiters may vary.

第二次参数竟然可以NULL
是因为strtok中用static指针记住了上次处理后的位置

我想是因为这个函数内部实现时,用到了静态变量,而要不要修改这个变量,就是要根据第一个参数来确定!

当为NULL时,就不再修改Static变量的值了!

这个静态变量的作用,就是记录原始字符串的长度的!

posted @ 2009-10-07 19:14 Error 阅读(523) | 评论 (0)编辑 收藏

new和delete的用法

new和delete运算符用于动态分配和撤销内存的运算符

new用法:

          1.     开辟单变量地址空间

               1)new int;  //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 

               2)int *a = new int(5) 作用同上,但是同时将整数赋值为5

          2.     开辟数组空间

               一维: int *a = new int[100];开辟一个大小为100的整型数组空间

               二维: int **a = new int[5][6]

               三维及其以上:依此类推.

         一般用法: new 类型 [初值]

delete用法:

          1. int *a = new int;

               delete a;   //释放单个int的空间

          2.int *a = new int[5];

               delete [] a; //释放int数组空间

int *p1 = (int *)malloc(sizeof(int) * length);

int *p2 = new int[length];

运算符new比malloc要简单多了,这是因为new内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new的语句也可以有多种形式。例如

class Obj

{

public :

    Obj(void);      // 无参数的构造函数

    Obj(int x);     // 带一个参数的构造函数

}

void Test(void)

{

    Obj *a = new Obj;

    Obj *b = new Obj(1);   // 初值为1

   

    delete a;

    delete b;

}

如果用new创建对象数组,那么只能使用对象的无参数构造函数。例如

    Obj *objects = new Obj[100];   // 创建100个动态对象

不能写成

    Obj *objects = new Obj[100](1);// 创建100个动态对象的同时赋初值1

在用delete释放对象数组时,留意不要丢了符号‘[]’。例如

    delete []objects;   // 正确的用法

delete objects; // 错误的用法

后者相当于delete objects[0],漏掉了另外99个对象。


malloc   和free只是分配了空间.
而new和delete不仅分配了空间,还完成了对构造函数和析购函数的调用,当然这是对对象而言。
两者在对基本数据类型操作时候,没有多大区别,区别在于对对象进行操作时。malloc和free是函数,但new和delete是操作符

posted @ 2009-10-07 17:15 Error 阅读(982) | 评论 (0)编辑 收藏

输出位(最简单的情形)

#include <iostream>

using namespace std;

void display_bits(unsigned u)
{
    int t;
    for(t = 128; t >= 1; t /= 2)\
    {
        if(u&t) cout<<"1 ";
        else cout<<"0 ";
    }
    cout<<endl;
}

int main()
{
    display_bits(10);
    return 0;
}

posted @ 2009-10-07 15:50 Error 阅读(146) | 评论 (0)编辑 收藏

枚举与对应项字符串的转化

#include <iostream>

using namespace std;

enum language{java, c, pascal, fortran, vc, vb, cpp} lang;

char name[][10] = {
"java",
"c",
"pascal",
"fortran",
"vc",
"vb",
"cpp"
};

int main()
{
    lang = fortran;
    cout << name[lang] << endl;

    lang = java;
    cout << name[lang] << endl;

    lang = pascal;
    cout << name[lang] << endl;

    lang = (language) 6;//这个强转经典
    cout << name[lang] << endl;
    return 0;
}

posted @ 2009-10-07 15:10 Error 阅读(1296) | 评论 (0)编辑 收藏

比较复杂和怪异的指针用法-请教???

#include "iostream.h"
#include "iomanip.h"
int n;
int main(int argc, char* argv[])
{
    void stu_average(int (*p)[6]);
    void subject_average(int (*p)[6]);
    int a[50][6];
    int i,j;
    int (*p)[6]=a;
    cin>>n;
    for (i=0;i<n;i++)
        for (j=0;j<6;j++)
            cin>>*(*(p+i)+j);

    stu_average(a);

    subject_average(a);
    return 0;
}
void stu_average(int (*p)[6])
{
    int sum=0;
    int i,j;

    for (i=0;i<n;i++)
    {

        cout<<*(*(p+i)+0)<<" ";
        for (sum=0,j=1;j<6;j++)
        {
            sum+=*(*(p+i)+j);
            cout<<setiosflags(ios::fixed)<<setprecision(1);
            cout<<*(*(p+i)+j)<<" ";
        }
        cout<<sum/5.0<<endl;
    }
}
void subject_average(int (*p)[6])
{
    int i,j;
    int sum=0;
    for (j=1;j<6;j++)
    {
        for (i=0,sum=0;i<n;i++)
        {
            sum+=*(*(p+i)+j);
        }
        cout<<setiosflags(ios::fixed)<<setprecision(1);
        cout<<(float)sum/n<<" ";
    }
    cout<<endl;
}

谁能给我讲一下里面的指针哦?????

posted @ 2009-10-06 18:25 Error 阅读(193) | 评论 (0)编辑 收藏

头文件iomanip

主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。它是I/O流控制头文 件,就像C里面的格式化输出一样.以下是一些常见的控制函数的:
  dec 置基数为10 相当于"%d"
  hex 置基数为16 相当于"%X"
  oct 置基数为8 相当于"%o"
  setfill(c) 设填充字符为c
  setprecision(n) 设显示小数精度为n位
  setw(n) 设域宽为n个字符
  这个控制符的意思是保证输出宽度为n。如:
  cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100; 输出结果为
  1 10100 (默认是右对齐)当输出长度大于3时(<<1000),setw(3)不起作用。
  setioflags(ios::fixed) 固定的浮点显示
  setioflags(ios::scientific) 指数表示
  setiosflags(ios::left) 左对齐
  setiosflags(ios::right) 右对齐
  setiosflags(ios::skipws 忽略前导空白
  setiosflags(ios::uppercase) 16进制数大写输出
  setiosflags(ios::lowercase) 16进制小写输出
  setiosflags(ios::showpoint) 强制显示小数点
  setiosflags(ios::showpos) 强制显示符号
  举例:
  #include <iostream>
  #include <iomanip>
  using namespace std;
  int main()
  {
  cout<<12345.0<<endl;//输出"12345"
  cout<<setiosflags(ios::fixed)<<setprecision(3)<<1.2345<<endl;输出"1.235"
  cout<<setiosflags(ios::scientific)<<12345.0<<endl;//输出"1.234500e+004 "
  cout<<setprecision(3)<<12345.0<<endl;//输出"1.235e+004 "
  return 0;
  }

posted @ 2009-10-06 16:28 Error 阅读(2076) | 评论 (2)编辑 收藏

寂寞才说爱

佛山和广州之行让我大开眼界:
原来爱可以那么简单,那么开放!
原来这个世界上什么人都有,什么事都有!

.......

原来我很蠢!!!!
将来步入社会不被淘汰才怪!!!!

posted @ 2009-10-06 16:15 Error 阅读(229) | 评论 (0)编辑 收藏

一些想法

关于怎样才可以实现自己心目中的梦想:
1、进国内有名大公司
2、全额奖学金+公费留学外国名校
想来想去,觉得还是不要好高骛远,急功近利(这几年我失败的原因就在于此),所以,还是一个月一个月的安排好自己的时间最好,不然最后恐怕是“心比天高,命比纸薄”,到头来还不是竹篮打水一场空!

这个月我的计划是:
1、学习:每一科都要赶上去,现在看来只有用晚上的时间啦,因为白天不是上课就得来实验室,以后要经常来实验室多学习,多向师兄师姐和韩老师请教,多学点东西。期末我要考全年级第一!!!!
马拉戈壁,我就不信我考不到!!!你看看你的那些同学,个个比你牛多了!!!!
2、弄ACM:革命尚未成功,同志仍需努力。。。比起别人来,真的差距好大啊!!!!都怪自己大一一年的时间荒废了这么多,现在要赶上别人,当然困难啦!!!!可有什么办法,这年头,只有玩命的弄才有希望啊!
3、弄MCM:没办法啊,为了那点学分啊!
4、学精C++:做项目的需要啊!要多和夏师兄沟通一下,把ACE和OGRE弄通,把项目平台搭建起来!
5、情商:和人交往沟通的能力,作为领导的能力
6、说话:口才啊
7、做事
8、心理素质:自信、幽默、开心

posted @ 2009-10-06 15:55 Error 阅读(147) | 评论 (0)编辑 收藏

一切重新开始......

这几天学校因为闹甲流闹得很厉害,恰巧有人迫切想我去找她,就去了佛山和广州,见到和经历了太多的人和事。觉得自己很不争气,哥为了我和这个家拼命的付出,而我呢,不思进取,自甘堕落,贪玩好耍,亏我还有那么多好心人一直这样关心我,呵护我!我怎么对得起他们啊!!我他妈的简直连猪狗都不如!!!简直就是人渣中的人渣!!!!

思来想去,我决定,一切重新开始。。。。。。

posted @ 2009-10-06 15:34 Error 阅读(156) | 评论 (0)编辑 收藏

仅列出标题
共2页: 1 2