C语言中用sizeof()测量指针变量结果却不同,如sizeof(*p)和sizeof(p)

本文通过实例解析了C语言中指针变量`p`与字符串常量的关系。`sizeof(*p)`返回的是单个字符的大小(通常为1),而`sizeof(p)`返回的是指针本身的大小(在64位系统中通常为8)。指针p初始化后指向字符串hello的第一个字符,因此`*p`表示字符'h',故其大小为1,而p作为指针,存储的是内存地址,所以其大小为8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.如char *p="hello",*p所指的是内容,p所指的地址,

下面就用程序说明:

#include<stdio.h>
int main()
{
  char *p="hello";
  printf("sizeof()所测数据*p:%d\n",sizeof(*p));
  printf("sizeof()所测数据p:%d\n",sizeof(p));
  return 0;
  }
  
运行结果:
sizeof()所测数据*p:1
sizeof()所测数据p:8

为什么会出现1和8呢?

这是因为p是指向地址,地址是为8位,所以,所测数据为8。

对字符指针变量p初始化,实际是把字符串第一个元素的地址(即存放字符串的字符数组的首元素地址)赋给指针变量p,使p指向字符串的第一个字符,由于字符串常量"hello"已由系统分配在内存连续的6个字节,因此,p就指向字符串第一个字符,所以,所测数据是1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值