#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 *)#
int *pi = #
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;
}
关于sizeof 和strlen 的计算的知识总结
最新推荐文章于 2022-11-07 06:00:00 发布