本文共 1838 字,大约阅读时间需要 6 分钟。
在程序中,对数组和字符串的存取,哪个更有效率?
先看一段程序:
#include "stdio.h"int main() { char a = 1; char c[] = "123456789"; char *p = "123456789"; a = c[1]; a = p[1]; return 0;}
声明了一个数组c和一个字符串p,然后同样读取其中的一个值,对应的汇编代码如下:
10:a=c[1];004010678A4DF1 movcl,byteptr[ebp-0Fh]0040106A884DFC movbyteptr[ebp-4],cl11:a=p[1];0040106D8B55EC movedx,dwordptr[ebp-14h]004010708A4201 moval,byteptr[edx+1]004010738845FC movbyteptr[ebp-4],al
可以看出对于a = c[1]的操作,是直接将数组中字符串的元素读取到c1寄存器中(也就是a)
对于a = p[1]的操作,显示将指针的值edx中,再根据地址读取字符元素
所以数组的读取比字符串的读取要有效率,即在栈上的数组比指针指向的字符串要读取快。
#includeusing namespace std;int fun (int x) { int count = 0; while (x) { x &= (x-1); ++count; } return count;}int main() { int x = 0; cin>>x; cout<<"ans is :"< <
分析:把一个整数减去1,再和原整数做 & 运算,就会把整数最右边一个1变成0,通过while(x)来计数有多少个1.
sizeof 引用
的大小是被引用变量的大小;sizeof 指针
的大小是指针本身的大小**已知strcpy的函数原型:char *strcpy(char strDest, const char strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。
#include#include cahr* strcpy (char *strDest, const char *strSrc){ assert ((strDest != NULL) && (strSrc != NULL)); char *addr = strDset; while ((*strDest++ = *strSrc++) != '\0'); return addr;}
转载地址:http://gvwzi.baihongyu.com/