C技术测试-变量、数组值地址分析

变量、数组值地址分析

#include <stdio.h> 
#include <stdlib.h>

struct Rectangle
{
	int width;
	int heigth;
};

int main()
{
	//------------------1.变量值、地址------------------
	int AOSsize=8;
	printf("------------------1.变量值、地址------------------\n");
	printf("AOSsize的值: %d\n", AOSsize);
	printf("AOSsize的地址: %d\n", &AOSsize);
	printf("\n\n");


	//------------------2.数组形式值、地址------------------
	struct Rectangle rectangle[3] = { {3,4},{5,6},{7,8} };
	for (int i = 0; i < 3; i++)
	{
		printf("第%d个长方体的体积%d\n", i + 1, rectangle[i].width* rectangle[i].heigth);
	}
	printf("------------------2.数组值、地址------------------\n");
	printf("rectangle:        %d\n", rectangle);               //数组第一个元素
	printf("&rectangle[0]:    %d\n", &rectangle[0]);		   //数组第一个元素的地址

	printf("&rectangle:       %d\n\n", &rectangle);            //整个数组的地址
	

	printf("rectangle+1:     %d\n", rectangle+1);             //偏移:数组第一个元素的地址+1
	printf("&rectangle[0]+1: %d\n", &rectangle[0] + 1);       //偏移:数组第一个元素的地址+1

	printf("&rectangle+1:    %d\n\n", &rectangle+1);          //偏移:整个数组的地址+1
	

	printf("sizeof(rectangle):     %d\n", sizeof(rectangle));
	printf("sizeof(&rectangle):    %d\n", sizeof(&rectangle));
	printf("\n\n");


	//------------------3.malloc形式值、地址------------------
	struct Rectangle *pt = (Rectangle *)malloc(AOSsize*sizeof(Rectangle));;
	for (int i = 0; i < AOSsize; i++)
	{
		pt[i].width = (int)(rand() % 10 + 1);
		pt[i].heigth = (int)(rand() % 10 + 1);
	}

	printf("------------------3.malloc形式值、地址------------------\n");
	printf("指针pt的地址(&pt):   %d\n", &pt);
	printf("指针pt存储的地址(pt):%d\n", pt);

	pt++;	//偏移:pt+1   指向下一个结构体数组元素rectangle[1]的首地址

	printf("指针pt的地址(&pt):   %d\n", &pt);
	printf("指针pt存储的地址(pt):%d\n", pt);
	
	return 0;
}

在这里插入图片描述


struct Rectangle rectangle[3] = { {3,4},{5,6},{7,8} };
①C语言中规定,不带任何下标的数组名代表数组的首地址(数组首元素的首地址),即第一个元素的地址。即 rectangle=&rectangle[0]。
②&rectangle是整个数组结构体rectangle的首地址,和rectangle值相同,但意义不同。
③rectangle+1指向下一个结构体数组元素rectangle[1]的首地址,而&rectangle+1是在整个数组首地址的基础上偏移一个sizeof(rectanle)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值