关于sizeof 和strlen 的计算的知识总结

来源:互联网 发布:见一页而知岁月将暮 编辑:程序博客网 时间:2024/05/16 17:16
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<assert.h>int main(){    int a[3][4] = { 0 };    printf("%d\n", sizeof(a));// a单独放在sizeof内部 代表整个数组  48    printf("%d\n", sizeof(a[0][0])); //代表首元素的地址   4    printf("%d\n", sizeof(a[0])); //表示第一行    16    printf("%d\n", sizeof(a[0] + 1));// 表示第一行 第二个元素   4    printf("%d\n", sizeof(a + 1)); //第一行第二个元素 4    printf("%d\n", sizeof(&a[0] + 1)); // 第二行   4    printf("%d\n", sizeof(*a));//16 表示第一行的元素       printf("%d\n", sizeof(a[3]));//16 数组后面一行空间    int num = 10;     char *pc = (char *)&num;       int *pi = &num;    printf("%p\n", &num);  //;num的地址    printf("%p\n", pc);    //num 的地址    printf("%p\n", pc + 1);  //num的地址往后走一个字节    printf("%p\n", pi);  //num 的地址    printf("%p\n", pi + 1);   //num的地址往后走四个字节    printf("\n");    char *p = "abcdef";    printf("%d\n", sizeof(p)); //整个素组的地址  4    printf("%d\n", sizeof(p + 1));// 指向第二个元素的地址  4    printf("%d\n", sizeof(*p)); //第一个字符     1    printf("%d\n", sizeof(p[0]));//第一个字符   1    printf("%d\n", sizeof(&p)); //整个数组的地址  4    printf("%d\n", sizeof(&p + 1));//指向p数组后面的空间的地址   4    printf("%d\n", sizeof(&p[0] + 1));//第二个元素的地址  4    printf("%d\n", strlen(p));//   6    printf("%d\n", strlen(p + 1));//从第二个元素开始向后找  5    printf("%d\n", strlen(*p));//err 参数为指针     printf("%d\n", strlen(p[0]));//err    printf("%d\n", strlen(&p));//x 整个数组的地址 但是不知道/0在哪  x    printf("%d\n", strlen(&p + 1));//指向p后面空间的地址    x    printf("%d\n", strlen(&p[0] + 1));//第二个元素的地址   x    char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };    printf("%d\n", sizeof(arr)); //arr代表整个数组   6    printf("%d\n", sizeof(arr + 0)); //第一个元素的地址 4    printf("%d\n", sizeof(*arr));//第一个元素  1    printf("%d\n", sizeof(arr[1]));//第二个元素  1    printf("%d\n", sizeof(&arr));//取地址整个数组   4    printf("%d\n", sizeof(&arr + 1));//指向数组之后的空间的地址  4    printf("%d\n", sizeof(&arr[0] + 1));//指向第二个元素的地址  4    printf("%d\n", strlen(arr));//找不到\0,求出的是随机值    printf("%d\n", strlen(arr + 0)); //x    printf("%d\n", strlen(*arr));//err 参数是指针     printf("%d\n", strlen(arr[1])); //erro参数是指针     printf("%d\n", strlen(&arr));//x    printf("%d\n", strlen(&arr + 1));//指向下一个数组  x-6    printf("%d\n", strlen(&arr[0] + 1));//第二个元素的地址  x-2    int a[] = { 1, 2, 3, 4 };    printf("%d\n", sizeof(a));//数组名放在sizeof后面 代表整个数组  16    printf("%d\n", sizeof(a + 0));//a不是单独放在sizeof后  代表首元素的地址  4    printf("%d\n", sizeof(*a));//a是首元素的地址  解引用是1 一个整形4个字节  4    printf("%d\n", sizeof(a + 1));//是第二个元素的地址  地址的字节为四  4    printf("%d\n", sizeof(a[1]));//表示下标为1的元素的地址     4    printf("%d\n", sizeof(&a));//取地址数组名代表整个数组的地址  4    printf("%d\n", sizeof(&a + 1));//指向整个数组后面的空间的地址  4    printf("%d\n", sizeof(&a[0]));//数组第一个元素的地址         4    printf("%d\n", sizeof(&a[0] + 1));// 数组第二个元素的地址    4    system("pause");    return 0;}
原创粉丝点击