C++面试题汇总(1)(不断更新)

xiaoxiao2021-02-28  73

1.memcpy针对32位系统的优化

//使用int*指针拷贝前面4倍数的字节,剩下的用char*指针拷贝 #include <stdio.h> #include <stdio.h> #include <stdio.h> #include <stdio.h> #include <string.h> void * memcpy_my(void *dest, void *src, size_t n) { void *pTmp = NULL; int len = 0; int mod = 0; int i = 0; int *pnDest = NULL; int *pnSrc = NULL; char *pchDest = NULL; char *pchSrc = NULL; if(NULL == dest || NULL == src || n <= 0) { return NULL; } pTmp = dest; len = n/4; mod = n%4; if(len > 0 ) { pnDest = (int *) dest; pnSrc = (int *) src; while(i < len) { *pnDest++ = *pnSrc++; i++; } if(0 == mod) { return pTmp; } } pchDest = (char *)dest + len; pchSrc = (char *)src + len; while(mod--) { *pchDest++ = *pchSrc++; } return pTmp; } int main() { char a[] = "1234567"; char b[20] ; char c[20] ; memcpy(b, a, sizeof(a)); memcpy_my(c, a, sizeof(a)); printf("\n a[%s] \n b[%s] \n c[%s] \n", a , b ,c); return 0; }

2.下面的程序可以从1....n中随机输出m个不重复的数。

#include <stdio.h> #include <string.h> #include <time.h> int knuth(int n, int m) { int i = 0; srand((unsigned int)time(0)); for ( i=0; i<n; i++) { if ( (rand() % (n-i)) < m) { printf(" i = %d \n",i); m--; if(m <= 0) { break; } } } return 0; } int main() { knuth(10,5); return 0; }

转载请注明原文地址: https://www.6miu.com/read-85081.html

最新回复(0)