指针的相关运算,包括一维数组、二维数组、字符数组的sizeof、strlen运算
2017-07-18 21:28
561 查看
一维数组
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));//整个数组 4*4
printf("%d\n", sizeof(a + 0));//首元素地址 4
printf("%d\n", sizeof(*a));//首元素 4
printf("%d\n", sizeof(a + 1));//第二个元素地址 4
printf("%d\n", sizeof(a[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
printf("%d\n", sizeof(*&a));//整个数组 4*4字符数组
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr));//整个数组 6*1
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
char *p = "abcdef";//p中只存a的地址
printf("%d\n", sizeof(p));//字符指针,4个字节 4
printf("%d\n", sizeof(p + 1));//b的地址 4
printf("%d\n", sizeof(*p));//首元素 1
printf("%d\n", sizeof(p[0]));//首元素 1
printf("%d\n", sizeof(&p));//p的地址 4
printf("%d\n", sizeof(&p + 1));//跳过整个字符串的地址 4
printf("%d\n", sizeof(&p[0] + 1));//b的地址 4
二维数组
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));//整个数组 12*4
printf("%d\n", sizeof(a[0][0]));//第一个元素 4
printf("%d\n", sizeof(a[0]));//第一行元素 4*4
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));//降维,第一行元素 4*4
printf("%d\n", sizeof(a[3]));//降维 16
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));//整个数组 4*4
printf("%d\n", sizeof(a + 0));//首元素地址 4
printf("%d\n", sizeof(*a));//首元素 4
printf("%d\n", sizeof(a + 1));//第二个元素地址 4
printf("%d\n", sizeof(a[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
printf("%d\n", sizeof(*&a));//整个数组 4*4字符数组
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr));//整个数组 6*1
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
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' }; printf("%d\n", strlen(arr));//随机值 printf("%d\n", strlen(arr + 0));//随机值 printf("%d\n", strlen(*arr));//97作为地址不可以访问 printf("%d\n", strlen(arr[1]));//98作为地址不可以访问 printf("%d\n", strlen(&arr));//随机值 printf("%d\n", strlen(&arr + 1));//随机值 printf("%d\n", strlen(&arr[0] + 1))//随机值指针
char *p = "abcdef";//p中只存a的地址
printf("%d\n", sizeof(p));//字符指针,4个字节 4
printf("%d\n", sizeof(p + 1));//b的地址 4
printf("%d\n", sizeof(*p));//首元素 1
printf("%d\n", sizeof(p[0]));//首元素 1
printf("%d\n", sizeof(&p));//p的地址 4
printf("%d\n", sizeof(&p + 1));//跳过整个字符串的地址 4
printf("%d\n", sizeof(&p[0] + 1));//b的地址 4
char *p = "abcdef"; printf("%d\n", strlen(p));//6 printf("%d\n", strlen(p + 1));//b~f 5 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));//b~f 5
二维数组
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));//整个数组 12*4
printf("%d\n", sizeof(a[0][0]));//第一个元素 4
printf("%d\n", sizeof(a[0]));//第一行元素 4*4
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));//降维,第一行元素 4*4
printf("%d\n", sizeof(a[3]));//降维 16
相关文章推荐
- 一维数组、二维数组、字符数组、指针 相关的 sizeof 计算
- 一维数组,字符数组,字符串,二维数组在sizeof()和strlen()下的不同输出
- 字符数组,字符指针,sizeof,strlen总结
- C++字符数组、字符指针、strlen、sizeof总结
- 关于一维数组、二维数组、一级指针、二级指针、指针数组、数组指针、空指针、字符指针、const的个人理解
- 一维数组、二维数组和指针的相关计算
- 字符数组,字符指针,sizeof,strlen总结
- 字符串,字符指针和字符数组的sizeof和strlen
- 字符数组,字符指针,sizeof,strlen总结
- [cpp] 字符数组,字符指针,sizeof,strlen总结
- sizeof 和 strlen 在求解数组 字符数组 字符串 二维数组时候的小结
- 字符数组和指针的sizeof(),strlen()以及getline()
- 字符数组,字符指针,sizeof,strlen总结
- 数组的相关运算(sizeof和strlen的灵活应用)
- 字符数组,字符指针,sizeof,strlen总结
- C、C++字符数组,字符指针,sizeof,strlen总结
- 字符数组,字符指针,sizeof,strlen总结
- 数组相关的运算(sizeof,strlen)
- C++中strlen与sizeof处理字符数组和字符指针
- 字符数组 字符指针 sizeof strlen 的区别