C语言中,Int 占4字节,是指int变量的地址在内存中占4字节也就是32个二进制位,还是指int
C语言中,Int占4字节,是指int变量的地址在内存中占4字节也就是32个二进制位,还是指int变量本身在内存中占4字节啊?打个比方,自建函数intlen(doublea...
C语言中,Int 占4字节,是指int变量的地址在内存中占4字节也就是32个二进制位,还是指int变量本身在内存中占4字节啊?打个比方,自建函数int len(double a[]){printf("%d %d,sizeof(a),sizeof(a[0])");},在主函数中调用时输出分别是4和8,解释是数组作为参数传递首地址,既然是传递首地址,sizeof(a)调用时不应该是8吗?
展开
2个回答
展开全部
int占4字节,例如int a;变量a用来存放整型数据,不管a的值是多少,都会为其分配4个字节的存储空间来存放数据。
你的例子中,sizeof(a),是求出a的存储空间的个数,a是数组名,代表的是个地址,而存储地址,通常与类型无关,也就是不管a是什么类型数组的数组名,因为地址都是整型值,所以这个应该是和计算机有关的,通常对地址的存储都是4个字节,
而sizeof(a[0])是求出数组元素的存储空间的个数,数组a是double型的,每个元素都是double型的,那存放每个元素都给分8个字节的空间。
你的例子中,sizeof(a),是求出a的存储空间的个数,a是数组名,代表的是个地址,而存储地址,通常与类型无关,也就是不管a是什么类型数组的数组名,因为地址都是整型值,所以这个应该是和计算机有关的,通常对地址的存储都是4个字节,
而sizeof(a[0])是求出数组元素的存储空间的个数,数组a是double型的,每个元素都是double型的,那存放每个元素都给分8个字节的空间。
追问
如果这样的话,那么请问下面一段代码……int arr[5]=0;printf("arr是%p,arr+1是%p,(&arr)+1是%p\n",arr,arr+1,(&arr)+1);这段代码运行后,arr+1的地址比arr大4,(&arr)+1的地址比arr多20……书上解释是:因为数组arr是int型占4字节,所以arr+1的地址比arr的地址大4……请问书上的意思不就是int类型的变量地址占4字节吗
追答
%p应该是输出地址值吧,arr是arr[0]的地址,假设是2210,这是个起始地址,数组是整型的,每个元素都会有连续的4个字节的空间来存放数据,也就是2210,2211,2212,2213,这四个字节的空间用来存放arr[0],arr+1是arr[1]的地址,那就是2214.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询