代码如下:
char a[] = { 'a','b','c','d','e','f' };
printf("%d\n", strlen(a));
printf("%d\n", strlen(a+0));
//printf("%d\n", strlen(*a));
//printf("%d\n", strlen(a[1]));
//printf("%d\n", strlen(&a));
//printf("%d\n", strlen(&a+1));
printf("%d\n", strlen(&a[0]+1));
char a[] = { 'a','b','c','d','e','f' }
strlen(a) 由于该数组中没有\0,strlen会一直读读读,统计\0前的字符个数,为随机值
strlen(a+0) 数组名表示首元素地址,+0仍为首元素地址,为随机值
strlen(*a) *a就不得了了,为数组首元素,即‘a’ ,在指针变量眼里,什么都是地址因而‘a’这个97,也被视为地址,直接访问会出错
strlen(a[1]) 同上
strlen(&a) 取出的是整个数组的地址,嘟嘟嘟嘟,随机值
strlen(&a+1) 取出的是整个数组的地址,向后跨一步到数组尾部后边的地址,嘟嘟嘟随机值
strlen(&a[0]+1) 随机值
我们接着看:
char a[] = "abcdef";
printf("%d\n", strlen(a));
printf("%d\n", strlen(a+0));
//printf("%d\n", strlen(*a));
//printf("%d\n", strlen(a[1]));
//printf("%d\n", strlen(&a));
//printf("%d\n", strlen(&a+1));
printf("%d\n", strlen(&a[0]+1));
char a[] = "abcdef"
strlen(a) 由于该数组中有\0,strlen统计\0前的字符个数,为6
strlen(a+0) 数组名表示首元素地址,+0仍为首元素地址,为6
strlen(*a) *a就不得了了,为数组首元素,即‘a’ ,在指针变量眼里,什么都是地址因而‘a’这个97,也被视为地址,直接访问会出错
strlen(a[1]) 同上
strlen(&a) 取出的是整个数组的地址,为6
strlen(&a+1) 取出的是整个数组的地址,向后跨一步到数组尾部后边的地址,嘟嘟嘟随机值
strlen(&a[0]+1) 第二个元素开始,为5
char* p = "abcdef";
printf("%d\n", strlen(p));
printf("%d\n", strlen(p+1));
//printf("%d\n", strlen(*p));
//printf("%d\n", strlen(p[0]));
//printf("%d\n", strlen(&p));
//printf("%d\n", strlen(&p+1));
printf("%d\n", strlen(&p[0]+1));
char* p = "abcdef"
strlen(p) strlen统计\0前的字符个数,为6
strlen(p+1) 数组名表示首元素地址,+1为第二个元素地址,为5
strlen(*p) *a就不得了了,为数组首元素,即‘a’ ,在指针变量眼里,什么都是地址因而‘a’这个97,也被视为地址,直接访问会出错
strlen(p[0]) 同上
strlen(&p) 取出的是指针变量p的地址,strlen一直向后读读读直到\0,为随机值
strlen(&p+1) 取出的是指针变量p的地址,跳过一个指针变量的地址继续先后读,strlen一直向后读读读直到\0,仍为随机值
strlen(&p[0]+1) 第二个元素开始,为5