愿所有美好如期而遇
- char *p = "abcdef";
-
- printf("%d\n", sizeof(p));
- printf("%d\n", sizeof(p+1));
- printf("%d\n", sizeof(*p));
- printf("%d\n", sizeof(p[0]));
- printf("%d\n", sizeof(&p));
- printf("%d\n", sizeof(&p+1));
- printf("%d\n", sizeof(&p[0]+1));
-
- 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));
8 8 1 1 8 8 8
6 5 error error 随机值 随机值 5
(博主用的是64位机器,所以地址占的空间大小为8字节,如果得4的话,是32位机器)
- char* p = "abcdef";
-
- printf("%d\n", sizeof(p));
- //p是字符指针,大小为4/8
-
- printf("%d\n", sizeof(p + 1));
- //p指向字符'b',求的还是p的大小,4/8
-
- printf("%d\n", sizeof(*p));
- //p指向'a',解引用访问'a',所以大小为1个字节
-
- printf("%d\n", sizeof(p[0]));
- //'a',1字节
-
- printf("%d\n", sizeof(&p));
- //&p,指针类型为char**,还是指针,4/8
-
- printf("%d\n", sizeof(&p + 1));
- //跳过一个char**大小的指针,还是char**类型的指针,4/8
-
- printf("%d\n", sizeof(&p[0] + 1));
- //指向'b'的指针,4/8
-
- //--------------------------------------------------------
- //--------------------------------------------------------
-
- printf("%d\n", strlen(p));
- //长度为6
-
- printf("%d\n", strlen(p + 1));
- //长度为5
-
- printf("%d\n", strlen(*p));
- //error, *p是'a',ASCII值为97,当做地址传入strlen,
- //成为野指针,非法访问
-
- printf("%d\n", strlen(p[0]));
- //同理
-
- printf("%d\n", strlen(&p));
- //随机值,指针类型为char**,指向p这个指针
- //注意p是指向字符串首元素的。
-
- printf("%d\n", strlen(&p + 1));
- //随机值,同理
-
- printf("%d\n", strlen(&p[0] + 1));
- //指向第二个字符,长度为5
