变量、数组值地址分析
#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) 。