在这里插入代码片
#include <stdio.h>
#include <stdlib.h>
//#define ADDR_ALIGN4(addr) (char*)(((int)addr+0x03)&(~0x03))//右对齐的操作
//#define ADDR_ALIGN4(addr) (char*)(((long)addr+0x03)&(~0x03))//右对齐的操作
#define ADDR_ALIGN4(addr) (char*)(((long long)addr+0x03)&(~0x03))//右对齐的操作
//可能是编译系统的原因,其指针类型和long long型大小相等,故用int和long会loses precision。
//补:c++中int为4字节大小,而64位系统指针为8字节,所以会出现错误。修改为long long 即可
//数组的首地址的应用场景
int main()
{
int a[51]={0,0,1,1,1,1,2,3,4,5,6,7,8};
printf("Hello World\n");
printf("%d\n",a);//输出一个a的首地址
//printf("%d\n",(int)a);//不允许地址转成int或char
//printf("%d\n",(char)a);//不允许地址转成int或char
printf("%d\n",a[0]);//输出a[0]的值
printf("%d\n",(char)a[0]);//int可以强转成char类型
printf("%d\n",*a);//用间接运算符取出数组a的首地址上的值
printf("%d\n",*a+100);//表达式*a的值(0)加100
printf("%d\n",(*a)+100);
for(int i=0;i<10;i++)
{
printf("%d\n",*(a+i));
}
char b[51]="1234567890ABABABABABABABABABABABABABABABAB";
printf("%d\n",ADDR_ALIGN4(b));
system("pause");
return 0;
}
【嵌入式 数组】数组的首地址和ADDR_ALIGN4(addr)
![](https://img-home.csdnimg.cn/images/20240711042549.png)