指针和数组相关运算
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) &数组名,这里的数组名代表整个数组。
相关文章推荐
- 指针的相关运算,包括一维数组、二维数组、字符数组的sizeof、strlen运算
- 鸡啄米:C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- 二十七、数组、指针和字符串:指针变量的声明、地址相关运算
- 数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”
- 指针和数组的相关运算
- 【C 语言】结构体相关 的 函数 指针 数组
- 内存分配、野指针、指针、数组相关
- 学习二维动态数组指针做矩阵运算的方法
- 一维数组、二维数组、字符数组、指针 相关的 sizeof 计算
- 数组相关的指针
- C当中数组的相关运算
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 数组与指针相关累赘混淆概念的简析
- C++中指针的数据类型和运算相关知识小结
- javascript 算法相关,如何利用指针特性求数组并集与交集
- android ndk 02 C语言 二级指针 指针运算 指针与数组
- C中数组以及数组相关的简单运算
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
- 指针数组的要运用和运算以及类的简单阐述