星期三, 三月 15, 2006

一些学习笔记,给自己看的,备忘

1.声明数组的一种方式:

int * data; //定义一个指针

int size = 8;

data = new int[size]; //该指针是数组的引用

int* data;

data = new int ;new符用以动态分配内存,后续可以:

data[i] = i;

2.C++中声明常量的方法有两种:

A #define Num

B const char* c= “friend”;

3.char * s = “12345n” = char s[] = “12345”

Cout<<s 结果是12345

Cout<<*s cout<<s[0]结果都是1

int* i[] = {1,2,3,4,5}

cout<<i 结果是 地址

cout<<i[0] 结果是1

4. printf 探讨

原型:extern void printf(const char *format,...);

用法:#include <stdio.h>

功能:格式化字符串输出

说明:format指定输出格式,后面跟要输出的变量

目前printf支持以下格式:

%c 单个字符

%d 十进制整数

%f 十进制浮点数

%o 八进制数

%s 字符串

%u 无符号十进制数

%x 十六进制数

%% 输出百分号%

一个格式说明可以带有几个修饰符,用来指定显示宽度,小数尾书及左对齐等:

- 左对齐

+ 在一个带符号数前加"+""-"

0 域宽用前导零来填充,而不是用空白符

域宽是一个整数,设置了打印一个格式化字符串的最小域。精度使用小数点后加数字表示的,

给出每个转换说明符所要输出的字符个数。

注意:带修饰符的显示可能不正常

举例:

// printf.c

#include <stdio.h>

#include <system.h>

main()

{

int i;

char *str="GGV";

clrscr();

textmode(0x00);

printf("Printf Demo-%%c");

printf("--------------");

printf("%c-%c-%c-%cn",'D','e','m','o');

printf("%2c-%2c-%2c-%2cn",'D','e','m','o');

printf("%02c-%02c-%02c-%02cn",'D','e','m','o');

printf("%-2c-%-2c-%-2c-%-2cn",'D','e','m','o');

getchar();

clrscr();

textmode(0x00); // not nessary

i=7412;

printf("Printf Demo-%%d");

printf("--------------");

printf("%dn",i);

printf("%14d",i);

printf("%+10dn",i); // output format not correct(bug)

printf("%-10dn",i);

getchar();

clrscr();

printf("Printf - d,o,x");

printf("--------------");

printf("%dn",i);

printf("%on",i); // %o and %x not implemented

printf("%xn",i);

getchar();

clrscr();

printf("Printf Demo-%%s");

printf("--------------");

printf(" %sn","Demo End");

printf(" %sn","Thanx");

printf(" %sn %s","Golden","Global View");

getchar();

return 0;

}

5. fread函数和fwrite函数

size_t fread(void *buffer, size_t size, size_t count, FILE *fp):从文件fp中读入count

,每次读size字节,读入的信息存在buffer指针指向的缓冲区。函数返回值等于实际读入的次数(可能少于count)。

size_t fwrite(void *buffer, size_t size, size_t count, FILE *fp):将buffer地址开始

的信息,写入count次,每次写size字节至文件fp中。函数返回值等于实际写入的次数(可能少于count)。

[例]、结构体类型数据。

  struct student_type

  {

   char name[10];

   int num;

   int age;

   char addr[30];

  }stu[40];

写入文件:

 for(i=0; i<40; i++) /* 每次写一个学生 */

  fwrite(&stu[i], sizeof(struct student_type), 1, fp);

  或:写一次

  fwrite(stu, sizeof(struct student_type), 40, fp);

从磁盘文件读出:

  for(i=0; i<40; i++)

  fread(&stu[i], sizeof(struct student_type), 1, fp);

  或:

fread(&stu[i], sizeof(struct student_type), 40, fp);

使用时是fopenfread fclose 不要忘记释放内存

例如:

FILE * stream;

int i;

stream = fopen(“/tmp/fwrite”,”r”);

fread(s,sizeof(struct test),nmemb,stream);

fclose(stream);

6.trim()

这是去掉空格函数

S = rs.getStream(number1).trim();

这是java中使用的方法,C/C++ 中的使用略有不同,要带参数,但都是小小菜

其中有一点 number1 不能为null 否则编译将不能通过。

7. 有了malloc/free为什么还要new/delete

mallocfreeC++/C语言的标准库函数,new/deleteC++的运算符。它们都可用于申请动态内存和释放内存。

对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free

因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

例子

Obj *a = (obj *)malloc(sizeof(obj)); // 申请动态内存

a->Initialize(); // 初始化

//…

a->Destroy(); // 清除工作

free(a); // 释放内存

void UseNewDelete(void)

{

Obj *a = new Obj; // 申请动态内存并且初始化

//…

delete a; // 清除并且释放内存

}

现在C++中已经很少用第一种方法了


SAP资料下载 [回复]

SAP下载网,

http://www.sap99.com

有很多的学习资料,推荐一下,

Comment by SAP资料下载网 (07/15/2008 20:24)

发表评论

标题

在此添加评论

称呼

邮箱地址(可选)

个人主页(可选)