#include <stdio.h> int main() { int a[5] = {1, 2, 3, 4, 5}; int* p1 = (int*)(&a + 1); // <==> (unsigned int)&a+sizeof(*&a) => 整个数组后面的那个地址 int* p2 = (int*)((int)a + 1); <=> 取a[0]后三个字节拼接a[1]第一个字节 => 0x02000000 int* p3 = (int*)(a + 1); <=> a[2] printf("%d ", p1[-1]); // (unsigned int)p1-1*sizeof(*p1) => a[4] printf("%d ", p2[0]); // 0x02000000 printf("%d ", p3[1]); // a[3] return 0; }
一条语句实现strlen
return (assert(s), (*s ? strlen(s+1)+1 : 0));
#size_t为无符号整数 strlen的返回值为 size_t 类型 size_t strlen(const char* s) { size_t length = 0; aasert(s);//当指针为空时运行出错 assert.h while(*s++) { length++; } return }
strcpy实现
#include <stdio.h> #include <assert.h> char* strcpy(char* dst, const char* src) { char* ret = dst; assert(dst && src); while( (*dst++ = *src++) != '