内存分配方法及字符(串)操作小结

OO~ posted @ 2014年2月27日 21:05 in C/C++ && 算法 , 5267 阅读

一. 内存分配方法

  内存分配方法在不同的语言下有不同的方法,但是原理都大同小异。下面主要就 C 和 C++ 中的内存分配方法做分析。

  C 中的内存分配方法主要有 malloc/free 和 memset 这两种。malloc/free 也是动态申请内存和释放内存,具体使用很简单:

int **a;
a = (int **) malloc(m * sizeof(int *));
free(a);

而 memset 函数是在 C 语言的头文件 string.h 中包含的。需要谨慎使用这个函数,因为其是以字节为单位进行赋值(在 int 等类型是使用该函数时需要注意)的,同时在内存的连续性问题上也有一定的相关性。函数原型如下,其中指针p为所操作的内存空间的首地址,c为每个字节所赋的值,n为所操作内存空间的字节长度,也就是内存被赋值为c的字节数。(memset 更多使用在 bool 类型的赋值中)

void * memset (void * p,int c,size_t n);

  C++ 中内存分配的方法主要是 new/delete。其中 new 调用构造函数完成动态分配和初始化工作,而 delete 会调用对象的析构函数,清理和释放掉内存。delete 有两种用法,对于内建简单数据类型,delete 和 delete [] 的功能是相同的。对于自定义的复杂数据类型,delete 和 delete [] 就不能互用,简单说来,前者是删除一个指针,后者是删除一个数组。注意 new 和 delete 不是函数,而是 C++ 的运算符。具体使用如:

int a[10];
a = new int[10];//new int(7), namely the initial value is 7;
delete a; // or delete []a;

二. 字符(串)操作

  算法中常常会有字符(串)等的操作。需要注意的是字符(串)和其他基本类型如 int 型等操作有很大不同,特别是四则运算上,‘0’ 和 0 也有区别。。。

  C 语言处理主要几个函数有 strcpy(), strcat(), strcmp(), strlen() 等,比较死板,但是速度却很快。

  python 在处理字符(串)时,个人觉得还是比较不错的,代码简洁,但是却会有大量时间的代价。(之前对同一字符(串)操作分别用 c 和 python 写了两段代码,运行的结果是后者时间是前者的 4 倍)

  C++ 中可以使用 C 的字符(串)操作方法,包含头文件是 cstring.h。而 C++ 本身有一个 string.h 的库,也算是一个类(感觉几乎所有的 C 的方法都可以看作是一个类)。标准C++中提供的string类得功能也非常强大的,有赋值、比较、交换等等。(目前位置用的较少,补充待续)

  在具体的问题中,我目前为止还有一个问题未得到解决:如何将一个字符 a 接到一个字符串 s 的尾部去。现有的 strcat() 等方法都是针对 char * & char * 操作的,我后来还试着尝试了先赋值给一个 char * 对象,然后再用 strcat() 等,但是还是会出现一些乱码等现象(python可能会比较好解决,直接可以取指定区间的子字符串)。

Avatar_small
依云 说:
2014年2月27日 21:53

先确保空间足够,然后
n = strlen(s);
s[n] = '\0';
s[n-1] = a;

Avatar_small
ddd 说:
2014年2月28日 08:50

@依云: 循环使用应该每次都要清 0 把?
PS:请教一下除了上述方法,没有更简单一点的么?

Avatar_small
依云 说:
2014年2月28日 13:28

@ddd: 循环使用的话,你可以完成之后再写结束符。或者你先把空闲空间全部置零,然后就可以直接往后边加字符了。

Avatar_small
OO~ 说:
2014年2月28日 17:59

@依云: 这个好像不行

Avatar_small
孙白菜 说:
2014年3月06日 09:35

你可以去看看realloc这个函数

Avatar_small
some one 说:
2014年3月19日 00:24

最后那个问题,如果都是string类就能直接使用c++ string 的加法来添加上去了,比如
string s="abcd"
cout<<s+"e"
就行

Avatar_small
OO~ 说:
2014年3月19日 08:51

@some one: 但是有一个不是string类就比较麻烦;特别是一个是 string s,另一个是 char a = 56 等等这类的东西;

Avatar_small
AP 10th Science Ques 说:
2022年9月17日 02:10

AP 10th Class Science Model Paper 2023 Pdf Download may useful to both Telugu Medium, English Medium and Urdu Medium 10th class students of the state board to score better marks in the exams like SA-1, SA-2, FA-1, FA-2, FA-3, FA-4. AP 10th Science Question PaperThese practice model papers not only helped in getting marks but also improve the student’s knowledge of science.AP 10th Science Model Paper 2023 Pdf with answers suggested for all kinds of exams held under BSEAP along with assignments were made with the instructions of Leading educational institutes, Education portals of the state such as Sakshi Education, Eenadu Pratibha.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter