1. 程式人生 > 其它 >C語言指標型別資料++操作探究

C語言指標型別資料++操作探究

起因是Csapp第三版,5.17,自己手動實現高階memset函式

程式碼如下:

#include<stdlib.h>
#include
<cstdio> #include<iostream> #include<stack> #include<ctime> #include<cmath> #include<windows.h> #include<vector> #include<map> #include <limits.h> using namespace std; void
*my_memset(void *s, int c, size_t n) { size_t K=sizeof(unsigned long); if(n<K) { size_t cnt = 0; unsigned char *schar = (unsigned char *)s; while (cnt < n) { *schar++ = (unsigned char)c; cnt++; } }
else { unsigned long comb=0; for (int i=1;i<=K;i++) { comb<<=CHAR_BIT; comb+=(unsigned char)c; } size_t cnt = 0; unsigned long *slong = (unsigned long *)s; while (cnt+K<=n) { *slong=comb; slong
+=1; cnt+=K; } unsigned char *schar =(unsigned char *)slong; while(cnt<n) { *schar++ = (unsigned char)c; cnt++; } } return s; } int main() { char a[15]; my_memset(a,65,sizeof(a)); cout<<a<<endl; memset(a,65,sizeof(a)); cout<<a<<endl; system("pause"); }

  關注

  這段程式碼,slong是unsigned long *型別的指標。

  我們想要指標指向範圍跨越sizeof(unsigned long),直接++,就能實現。不需要slong+=sizeof(unsigned long)