#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
/*一维数组
除了sizeof(a) &a表示整个数组
其余都表示数组首元素*/
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));//整个数组的大小 16
printf("%d\n", sizeof(a + 0));//a是首元素地址+0还是首元素地址 4
printf("%d\n", sizeof(*a));//a表示首元素地址,*a首个元素 4
printf("%d\n", sizeof(a + 1));//a表示首元素地址,a+1表示a[1]的地址
printf("%d\n", sizeof(a[1]));//4
printf("%d\n", sizeof(&a));//整个数组地址4
printf("%d\n", sizeof(*&a));//*和&抵消,a表示整个数组的大小16
printf("%d\n", sizeof(&a + 1));//数组首元素地址+1表示a[1]的地址 4
printf("%d\n", sizeof(&a[0]));//首元素地址 4
printf("%d\n", sizeof(&a[0] + 1));//a[1]的地址4
char arr[] = { 'a','b','c','d','e','f' };
printf("%d\n", sizeof(arr));//整个数组的大小 6
printf("%d\n", sizeof(arr + 0));//数组首元素地址+0等同 4
printf("%d\n", sizeof(*arr));//arr数组首元素地址 *arr数组首元素 1
printf("%d\n", sizeof(arr[1]));//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));//随机值
printf("%d\n", strlen(*arr));//err错误 strlen参数是地址*arr是字符a a的ascll值被当成地址
printf("%d\n", strlen(arr[1]));//err同上
printf("%d\n", strlen(&arr));//随机值
printf("%d\n", strlen(&arr + 1));//随机值
printf("%d\n", strlen(&arr[0] + 1));//随机值
/*1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
2. & 数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
3. 除此之外所有的数组名都表示首元素的地址。*/
char arr[] = "abcdef";
printf("%d\n", sizeof(arr));//整个数组大小7
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));//arr表示整个数组的地址 6
printf("%d\n", strlen(arr + 0));//数组首元素地址 6
printf("%d\n", strlen(*arr));//数组首元素 err
printf("%d\n", strlen(arr[1]));//err
printf("%d\n", strlen(&arr));//6
printf("%d\n", strlen(&arr + 1));//5
printf("%d\n", strlen(&arr[0] + 1));//5
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));//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 数组元素的ascll值作为地址
printf("%d\n", strlen(&p));//随即子
printf("%d\n", strlen(&p + 1));//随机值
printf("%d\n", strlen(&p[0] + 1));//随机值
/*二维数组*/
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));//整个数组的大小 48
printf("%d\n", sizeof(a[0][0]));//元素大小4
printf("%d\n", sizeof(a[0]));//行的大小 16
printf("%d\n", sizeof(a[0] + 1));//地址a[0][1]的地址 4
printf("%d\n", sizeof(*(a[0] + 1)));//元素大小 4
printf("%d\n", sizeof(a + 1));//a[1]地址 4
printf("%d\n", sizeof(*(a + 1)));//a[1]的整行大小16
printf("%d\n", sizeof(&a[0] + 1));// 地址 4
printf("%d\n", sizeof(*(&a[0] + 1)));//a[1] 16
printf("%d\n", sizeof(*a));//a表示数组首元素a[0]的地址 *a表示a[0] a[0]表示首行 16
printf("%d\n", sizeof(a[3]));//16
return 0;
}
指针---面试题
最新推荐文章于 2022-05-02 10:25:41 发布