很有意思的c语言printf问题
发布日期:2021-05-06 22:01:47 浏览次数:25 分类:精选文章

本文共 765 字,大约阅读时间需要 2 分钟。

在Ubuntu系统中测试C语言程序时,遇到了一段代码需要验证其执行效果。代码如下:

#include "stdio.h"
int main(void){
int a[2] = {0x123, 0x234};
int *p;
p = a;
*(p + 1) = 0x789;
long long b;
b = *(long long*)p;
printf("addr a[0]:%p\n", &a);
printf("addr a[1]:%p\n", a[1]);
printf("addr p:%p\n", p);
printf("addr b:%p\n", &b);
printf("b:%llx\n", b);
printf("size of b:%lu\n", sizeof(b));
return 0;
}

运行结果如下:

addr a[0]:0x7ffe58d24090
addr a[1]:0x7ffe58d24094
addr p:0x7ffe58d24090
addr b:0x7ffe58d240a0
b:78900000123
size of b:8

从结果可以看出,数组a的两个元素地址分别为0x7ffe58d240900x7ffe58d24094。指针p指向数组的起始地址0x7ffe58d24090。通过将p向右移动一位并赋值0x789,修改了数组的第二个元素。然后,将p指向long long类型的变量b,并成功赋值为78900000123。此外,b的大小为8字节,与long long类型的标准大小一致。

通过验证可以确认,代码在Ubuntu系统中运行正常,数组地址和指针变量的赋值均符合预期。

上一篇:如何用好28335的sci fifo(不使用中断)
下一篇:Python list类型的str转换为list

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月07日 00时57分49秒