变量、数组值地址分析
#include <stdio.h>
#include <stdlib.h>
struct Rectangle
{
int width;
int heigth;
};
int main()
{
int AOSsize=8;
printf("------------------1.变量值、地址------------------\n");
printf("AOSsize的值: %d\n", AOSsize);
printf("AOSsize的地址: %d\n", &AOSsize);
printf("\n\n");
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);
printf("&rectangle[0]+1: %d\n", &rectangle[0] + 1);
printf("&rectangle+1: %d\n\n", &rectangle+1);
printf("sizeof(rectangle): %d\n", sizeof(rectangle));
printf("sizeof(&rectangle): %d\n", sizeof(&rectangle));
printf("\n\n");
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++;
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)。