C语言数组的一些运算*a,a+1,&a+1,a+0
2017-07-16 18:53
225 查看
一维数组
数组名代表整个数组的时候只有两种情况,sizeof(数组名),这里的数组名表示整个数组。&数组名,这里的数组名表示整个数组。#include<stdio.h>
int main()
{
int a[]={1,2,3,4};
printf("%d\n",sizeof(a)); //16 a表示数组的首元素,首地址因此用sizeof计算它们的值,就是整个二维数组所占用的内存空间
printf("%d\n",sizeof(a+0)); //4 a+0为a[0]的首地址
printf("%d\n",sizeof(*a)); //4 首元素大小 就相当于 sizeof(*a)=4 =sizeof(a[0]);
printf("%d\n",sizeof(a+1)); //4 从首元素向后偏移一个整型的地址,即第二个元素的地址
printf("%d\n",sizeof(a[1])); //4 a[1]的字节数为4
printf("%d\n",sizeof(&a)); //4 &a为数组地址和a即a[0]的地址一样
printf("%d\n",sizeof(&a+1)); //4 跳过整个数组 指向数组后面的一个地址
printf("%d\n",sizeof(&a[0])); //4 首元素地址
printf("%d\n",sizeof(&a[0]+1));
return 0;
}
sizeof(a)表示整个数组大小,*a=*(a+0);*a表示数组的首地址,因此sizeof(*a)=4*sizeof(int)为16
总结为一句话,不论是一维数组,还是二维数组,如果直接sizeof数组名,那么大小为整个数组所占用的内存空间,如果计算类似a+0,a+1等数组名进行了偏移运算,那么它就代表指向某个元素的指针
字符数组
#include<stdio.h>int main()
{
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第二个元素的地址
return 0;
}
#include<stdio.h>
int main()
{
char *p="abcdef";
printf("%d\n",sizeof(p));//4 a的地址
printf("%d\n",sizeof(p+1));//4 b的地址
printf("%d\n",sizeof(*p ));//1 解引用指向一个字符大小
printf("%d\n",sizeof(p[0]));//1 首地址大小
printf("%d\n",sizeof(&p ));//4 p的地址
printf("%d\n",sizeof(&p+1));//4 p之后的地址
printf("%d\n",sizeof(&p[0]+1));//4 指向b的地址
return 0;
}
二维数组
#include<stdio.h>int main()
{
int a[3][4]={0};
printf("%d\n",sizeof(a)); //48 a表示数组的首元素,首地址因此用sizeof计算它们的值,就是整个二维数组所占用的内存空间
printf("%d\n",sizeof(a[0][0])); //4 a+0为a[0][0]的首地址
printf("%d\n",sizeof(a[0])); //16 第一行元素
printf("%d\n",sizeof(a[0]+1)); //4 第一行的第二个元素地址
printf("%d\n",sizeof(a+1)); //4 第二行地址
printf("%d\n",sizeof(&a[0]+1)); //4 第二行地址
printf("%d\n",sizeof(*a)); //16 第一行
printf("%d\n",sizeof(a[3])); //16 第四行
return 0;
}
相关文章推荐
- C语言 给字符数组赋值的方法<转>
- C语言中有关一维数组的一些运算
- c语言数组相关内存的一些概念
- c语言中数组和数组的一些计算
- c语言中数组名a和&a详细介绍
- 在C语言中运用全局变量返回函数的数组运算结果(Lu Hongling)
- C语言总结之异或运算的一些特性及巧妙应用
- [C]c语言中,scanf里面要是数组要不要加&?
- 【C语言】06 数组
- android ndk 02 C语言 二级指针 指针运算 指针与数组
- C语言—位运算、char、数组
- C语言运算优先级 简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
- C语言里面对数组名加1操作的一些讨论
- 鸡啄米:C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- c语言中数组名a和&a详细介绍
- C语言->数组名与指针
- C语言--定义为数组,声明为指针&定义为指针,声明为数组
- matlab 中有关矩阵逆的一些运算
- C语言中数组的一些基本知识小结
- 数组&指针&函数(转自C语言习题与解析 第3版 李春葆编著)