[ ]的优先级最大,属于一级优先级
1、一维数组
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
//一维数组
//sizeof判断数组大小时,仅看类型
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));
//这个是个特殊的,sizeof表示整个数组的大小,为4*4=16
printf("%d\n", sizeof(a + 0));
//a表示数组的首地址,加0还是地址,地址的大小为4个字节
printf("%d\n", sizeof(*a));
//a为首地址,*a表示首地址解引用,故为1的大小,为int型,故为4
printf("%d\n", sizeof(a + 1));
//地址的大小为4个字节
printf("%d\n", sizeof(a[1]));
//a[1]的值为2,大小为4个字节
printf("%d\n", sizeof(&a));
//&a为数组指针,则大小为指针的大小,为4
printf("%d\n", sizeof(*&a));
//&a为数组指针解引用为数组,则为16
printf("%d\n", sizeof(&a + 1));
//数组指针加1,为指针,为4,此处的+1实则为+16
printf("%d\n", sizeof(&a[0]));
//a[0]元素取地址,为4
printf("%d\n", sizeof(&a[0] + 1));
//a[0]元素取地址,为4,此处实则+4,到元素2的首地址
system("pause");
return 0;
}
2、字符数组
//字符数组
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr));
//6,注意:字符数无‘\0’
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
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", strlen(arr));
/strlren遇到'\0',停止计数,上述为字符数组,故无'\0',则随机输出19
printf("%d\n", strlen(arr + 0));
//随机值19
//printf("%d\n", strlen(*arr));
//strlen接收的类型为 char * str,此类型为char,编译不通过
//printf("%d\n", strlen(arr[1]));
//strlen接收的类型为 char * str,此类型为char,编译不通过
printf("%d\n", strlen(&arr));
//按常理说是不能通过的,因为类型为char**,类型不匹配
printf("%d\n", strlen(&arr + 1));
//按常理说是不能通过的,因为类型为char**,类型不匹配
printf("%d\n", strlen(&arr[0] + 1));
//首元素取地址,+1,则到'b',依次向后找'\0',随机输出,由于栈是向下生长的,故为19-1=18
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
char arr[] = "abcdef";
printf("%d\n", sizeof(arr));
//'\0'占内存,则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));
//6
printf("%d\n", strlen(arr + 0));
//6 +0不改变结果
//printf("%d\n", strlen(*arr));
//编译不通过,类型为char
//printf("%d\n", strlen(arr[1]));
//编译不通过,类型为char
printf("%d\n", strlen(&arr));
//按常理说是不能通过的,因为类型为char**,类型不匹配
printf("%d\n", strlen(&arr + 1));
//按常理说是不能通过的,因为类型为char**,类型不匹配
printf("%d\n", strlen(&arr[0] + 1));
//5
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p = "abcdef";
//p为指针
printf("%d\n", sizeof(p));
//4
printf("%d\n", sizeof(p + 1));
//4
printf("%d\n", sizeof(*p));
//7
printf("%d\n", sizeof(p[0]));
//相当于*p,则为,不是4
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));
//从当前地址向后找找到'\0',为6
printf("%d\n", strlen(p + 1));
//5
printf("%d\n", strlen(*p));
//char,不通过
printf("%d\n", strlen(p[0]));
//char,不通过
printf("%d\n", strlen(&p));
//char**,不通过
printf("%d\n", strlen(&p + 1));
//char**,不通过
printf("%d\n", strlen(&p[0] + 1));
//5,从'b'开始计算
system("pause");
return 0;
}
3、二维数组
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
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));
//4,下一行的首地址
printf("%d\n", sizeof(*(a[0] + 1)));
//4,下一行的首地址解引用为首元素
printf("%d\n", sizeof(a + 1));
//4
printf("%d\n", sizeof(*(a + 1)));
//16
printf("%d\n", sizeof(&a[0] + 1));
//4
printf("%d\n", sizeof(*(&a[0] + 1)));
//16
printf("%d\n", sizeof(*a));
//16首地址解引用为a[0],为4*4=16
printf("%d\n", sizeof(a[3]));
//16
system("pause");
return 0;
}