指针和数组相关运算

来源:互联网 发布:java开源社区 编辑:程序博客网 时间:2024/05/17 15:06
我们常用的 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));      //16printf("%d\n",sizeof(a+0));    //4printf("%d\n",sizeof(*a));     //4printf("%d\n",sizeof(a+1));    //4printf("%d\n",sizeof(a[1]));   //4printf("%d\n",sizeof(&a));     //4printf("%d\n",sizeof(&a+1));   //4printf("%d\n",sizeof(&a[0]));  //4printf("%d\n",sizeof(&a[0]+1));//4//字符数组char arr[] = {'a','b','c','d','e','f'};printf("%d\n",sizeof(arr));      //6printf("%d\n",sizeof(arr+0));    //4printf("%d\n",sizeof(*arr));     //1printf("%d\n",sizeof(arr[1]));   //1printf("%d\n",sizeof(&arr));     //4printf("%d\n",sizeof(&arr+1));   //4printf("%d\n",sizeof(&arr[0]+1));//4printf("%d\n",strlen(arr));      //随机数 假设19printf("%d\n",strlen(arr+0));    //19printf("%d\n",strlen(*arr));     //errorprintf("%d\n",strlen(arr[1]));   //errorprintf("%d\n",strlen(&arr));     //19printf("%d\n",strlen(&arr+1));   //13printf("%d\n",strlen(&arr[0]+1));//18char *p = "abcdef";printf("%d\n",sizeof(p));      //4printf("%d\n",sizeof(p+1));    //4printf("%d\n",sizeof(*p));     //1printf("%d\n",sizeof(p[0]));   //1printf("%d\n",sizeof(&p));     //4printf("%d\n",sizeof(&p+1));   //4printf("%d\n",sizeof(&p[0]+1));//4printf("%d\n",strlen(p));      //6printf("%d\n",strlen(p+1));    //5printf("%d\n",strlen(*p));     //errorprintf("%d\n",strlen(p[0]));   //errorprintf("%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));      //48printf("%d\n",sizeof(a+1));    //4printf("%d\n",sizeof(a[0][0]));//4printf("%d\n",sizeof(a[0]));   //16printf("%d\n",sizeof(&a[0]+1));//4printf("%d\n",sizeof(*a));     //16printf("%d\n",sizeof(a[3]));   //16
注:只有两种情况下数组名代表整个数组:(1) sizeof(数组名),这里的数组名代表整个数组 (2) &数组名,这里的数组名代表整个数组。

阅读全文
0 0
原创粉丝点击