C语言new函数的使用 c new函数( 三 )


movetext()函数将屏幕上左上角为(x1, y1), 右下角为(x2, y2)的一矩形窗
口内的文本内容拷贝到左上角为(x3, y3)的新的位置 。该函数的坐标也是相对于
整个屏幕而言的 。
注意:
1. gettext()函数和puttext()函数中的坐标是对整个屏幕而言的,即是屏
幕的绝对坐标, 而不是相对窗口的坐标 。
2. movetext()函数是拷贝而不是移动窗口区域内容, 即使用该函数后,原
位置区域的文本内容仍然存在 。
例3.
include conio.h
main()
{
int i;
char *f[]={"LoadF3", "PickAlt-F3", "New",
"SaveF2", "Write to", "Directory",
"Change dir", "Os shee", "Quit Alt-X"};
char buf[9*14*2];
clrscr();
textcolor(YELLOW);
textbackground(BLUE);
clrscr();
gettext(10, 2, 24, 11, buf);
window(10, 2, 24, 11);
textbackground(RED);
textcolor(YELLOW);
clrscr();
for(i=0; i9; i++)
{
gotoxy(1, i++);
cprintf("%s", f[i]);
}
getch();
movetext(10, 2, 24, 11, 40, 10);
puttext(10, 2, 24, 11, buf);
getch();
}
下面再介绍一些函数:
void highvideo(void);设置显示器高亮度显示字符 。
void lowvideo(void);设置显示器低亮度显示字符 。
void normvideo(void);使显示器返回到程序运行前的显示方式 。
int wherex(void);这两个函数返回当前窗口下光标的x, y坐标 。
int wherey(void);
C语言的new函数和free函数问题首先是new函数的疑问 , *newp是newbuf数组的首地址,那是不是不管newp变成了什么都会指向newbuf首地址,那么if判断是不是永远都是成立的?
并不是. 注意newp在申请成功时,是newp+=n;
也就是根据申请的n值, 每次newp是移动的, 比如, 先申请了500个字节,那么此时newp=newbuf+500, 再申请512个字节,就会导致判断不成立,返回NULL.
同时,即使是newp=newbuf时, 如果n大于1000, 那么一样会返回NULL.
然后是free函数的问题,是不是就是从p开始放入newbuf数组,使p之后的1000个位置都是空白的,以此达到清除内存的目的?
这里其实是让newp指向p, 也就是使得从p开始的内存又可以分配了.
对于free函数,参数p必须是new返回的值. 至于这个函数的详细功能,不需要深究,因为它是有问题的.
如果多次申请内存后, 再逐一释放,这个程序就会乱掉了.
关于c语言中new的使用必须使用malloc函数,因为C语言没有new这个操作符,但是如果你的编译器是C++的话,是可以使用new的 。
所以程序就是:
long *pNumber = (long*)malloc(sizeof(long) * 1000000);
开辟后就可以像数组一样使用它了 , 使用完后,一定要记得释放它,用free,像这样free(pNumber);使用new更方便 。
代码:
long* pNumber = new long[1000000];
使用完后,使用delete[]
像delete[] pNumnber;
扩展资料:
总结C++中三种关于"new"的使用方法
其一是new operator,也叫new表达式;其二是operator new,也叫new操作符 。这两个英文名称起的也太绝了,很容易搞混,那就记中文名称吧 。new表达式比较常见,也最常用,例如:
string* ps = new string("abc");
上面这个new表达式完成了两件事情:申请内存和初始化对象 。
new操作符类似于C语言中的malloc,只是负责申请内存,例如:void* buffer = operator new(sizeof(string));
注意这里多了一个operator 。这是new的第二个用法 , 算比较常见 。
第三个用法不常见 , 它用于在给定的内存中初始化对象,也就是说你手中已有一块闲置的内存,例如:
void* buffer = operator new(sizeof(string));
//那么现在buffer是你所拥有闲置内存的指针