您的位置:首页 > 编程语言 > C语言/C++

指针和数组相关运算

2017-12-19 15:45 344 查看
我们常用的 sizeof 不是函数,它是以字节为单位来计算不同类型的变量或数组大小的操作符; strlen 是函数,他的参数是 char * 类型的指针,它以 ‘\0’为结束标志求取 char * 类型的指针指向的对象到 ‘\0’ 之间元素所占的字节数。理解这些题目分析清楚“()“里面的内容代表的含义是关键。当我们理解二维数组时大胆的将它理解成一维数组 例如二维数组:int = a[3][4] = {0};可理解为 int a[] = {a[0],a[1],a[2]};只是这里一维数组的每个元素占 16 个字节,其他的完全可以按一维数组的理解方式去理解。这里我们不得不说说数组和指针的关系,虽然在某些情况下使用很类似,但他们二者的关系是没有关系,哈哈哈。以下题目的用算结果已做了验证。
//一维数组
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));      //16
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

//字符数组
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n",sizeof(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));      //随机数 假设19
printf("%d\n",strlen(arr+0));    //19
printf("%d\n",strlen(*arr));     //error
printf("%d\n",strlen(arr[1]));   //error
printf("%d\n",strlen(&arr));     //19
printf("%d\n",strlen(&arr+1));   //13
printf("%d\n",strlen(&arr[0]+1));//18

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));     //error
printf("%d\n",strlen(p[0]));   //error
printf("%d\n",strlen(&p));     //随机数
printf("%d\n",strlen(&p+1));   //随机数
printf("%d\n",strlen(&p[0]+1));//5

//二维数组
int a[3][4] = {0};             //a[3][4] = {a[0],a[1],a[2]};
printf("%d\n",sizeof(a));      //48
printf("%d\n",sizeof(a+1));    //4
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));     //16
printf("%d\n",sizeof(a[3]));   //16
注:只有两种情况下数组名代表整个数组:(1) sizeof(数组名),这里的数组名代表整个数组 (2) &数组名,这里的数组名代表整个数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 指针和数组