c - C中指针的字节宽度
问题描述
我是动态和静态分配的新手,我注意到一个奇怪的行为。我制作了以下代码片段:
#include ...
int main(void){
int i ;
printf(" using amesand :%p\n", &i);
int *j = malloc(sizeof(*j)) ;
printf(" using malloc :%p\n", j)
}
然后编译并生成:
using amesand :0x7ffc0128695c
using malloc :0x6686b0
我在某处读过
所有指针在同一实现中具有相同的宽度。
有人可以解释为什么 malloc() 返回的指针只有3 个字节长吗?
解决方案
使用运算符来确定指针的宽度sizeof
,例如:
int i;
printf(" using amesand :%zu\n", sizeof( &i ));
int *j = malloc(sizeof(*j));
printf(" using malloc :%zu\n", sizeof( j) );
至于此输出,地址可以具有不同的值,具体取决于分配相应内存的位置。并且使用转换说明符%p
通常会生成(如您的情况)跳过前导零的输出。
推荐阅读
- sql - 从 SQL 查询中获取表名
- html - CSS - 使用 Flex 属性的对齐问题
- android - Flutter Base64 编码字符串不完整
- annotations - 检查 pdf 标志的问题 pdfAnnotation.HasFlag 错误
- javascript - Form: password with images?
- owl - UML类图操作在本体中不重要吗?
- google-sheets - 如何突出显示从一张纸到另一张纸的重复文本
- caffe - error: variable ‘use_dilation’ set but not used in building intel caffe
- ruby-on-rails-5 - Linkedin oauth2 r_liteprofile 没有从 api 返回
- php - 需要一个高效的 mysql 数据库模式来存储积分/评级