站长统计
函数指针练习题2 1.指针
char* p = "abcde";
printf("%d\n", sizeof(p));
//4/8,这⾥的指针p指向的字符串的地址,求的是地址的⼤⼩;
printf("%d\n", sizeof(p + 0));
//4/8 此时的p是⾸元素的地址,求的是地址的⼤⼩;
printf("%d\n", sizeof(*p));
//1,求的是⾸元素的⼤⼩;
printf("%d\n", sizeof(p[0]));
//1 求的是⾸元素的⼤⼩;
printf("%d\n", sizeof(&p));
//4/8 求的是指针p的地址⼤⼩;
printf("%d\n", sizeof(&p + 1));
//4/8 同样是地址的⼤⼩;
printf("%d\n", sizeof(&p[0] + 1));
//4/8 求的是地址⼤⼩;
printf("%d\n", strlen(p));
//5,p相当于数组名,计算字符串元素个数;
printf("%d\n", strlen(p + 1));
//4 p+1相当于字符串的第⼆个元素,从b开始计算元素个数;
printf("%d\n", strlen(*p));
//err ⽆法计算,给了个常量,⾸元素计算元素的个数;
printf("%d\n", strlen(p[0]));
/
/err 与前⾯形同,p[0]等价于*p;
printf("%d\n", strlen(&p));
//随机值 计算⼀个地址的元素个数;
printf("%d\n", strlen(&p + 1));
//随机值 也⼀样是地址的元素个数;
printf("%d\n", strlen(&p[0] + 1));
指针函数的作用//4 &p[0]+1,相当于p[1],从第⼆个元素开始计算元素的个数;
2.⼆维数组
int a[3][4] = { 0 };
形象化这个⼆维数组,就是下⾯这种储存形式:
0000
0000
0000
printf("%d", (sizeof(a)));
//48 a是数组名,sizeof(a)求的是整个数组的⼤⼩;
printf("%d", (sizeof(a[0][0])));
//4 ⾸元素的⼤⼩是4个字节;
printf("%d", (sizeof(a[0])));
//16 求第⼀⾏数组元素的⼤⼩;
printf("%d", (sizeof(a[0]+1)));
//4 a[0]作为数组名不是单独放在sizeof()内部,a[0]是第⼀⾏第⼀个元素,a[0]+1就是第⼀⾏第⼆个元素;printf("%d", (sizeof(*(a[0]+1))));
//4 求的是第⼀⾏第⼆个元素的⼤⼩;
printf("%d", sizeof(a + 1));
//4/8 求的是地址的⼤⼩;
printf("%d", sizeof(*(a + 1)));
//16 a+1表⽰的是第⼆⾏的地址,*(a+1)相当于a[1],即第⼆⾏的地址
printf("%d", (sizeof(&a[0] + 1)));
//4/8 &a[0]取出的是第⼀⾏的地址,&a[0]+1取出的是第⼆⾏的地址,计算的是地址的⼤⼩;printf("%d", (sizeof(*(&a[0] + 1))));
//16 前⾯&a[0]+1取出的是第⼆⾏的地址,解引⽤就是第⼆⾏数组元素的⼤⼩;
printf("%d", sizeof(*a));
//16 第⼀⾏数组元素的⼤⼩;
pirntf("%d", sizeof(a[3]));
//16 虽然越界访问,但a[3]不会真的去运⾏,⽽是按照前⾯的类型 int[4] 来计算⼤⼩;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论