C++的sizeof()与指针

本文通过C++代码示例详细介绍了不同数据类型(包括字符、整型、浮点型及指针)在内存中所占的字节数,展示了sizeof运算符的使用,并对比了变量与指针在内存占用上的差异。

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

/*
 *sizeof()与指针
 */
#include<iostream>
using namespace std;
void main()
{	//字符和字符串
	char str[] = "world";
	char* p = str;
	char i = 10;
	//整形
	int j = 10;
	short int k = 10;
	long int l = 10;
	//浮点型
	float m = 10;
	double n = 10;

	cout << "char str[]----"<<sizeof(str) << endl;     //字符数组包含\0
	cout << "char* p = str----" << sizeof(p) << endl;  //p为地址,32位
	cout << "char i = 10----" << sizeof(i) << endl;    //char占1个字节内存单元
	cout << "int j = 10----" << sizeof(j) << endl;
	cout << "short int k = 10----" << sizeof(k) << endl;
	cout << "long int l = 10----" << sizeof(l) << endl;
	cout << "float m = 10----" << sizeof(m) << endl;
	cout << "double n = 10----" << sizeof(n) << endl;
	system("pause");
	return;
}
在C/C++中,`sizeof`运算符对指针的处理方式其对普通变量的处理方式存在显著差异。以下是详细说明: 1. **指针本身的大小**:`sizeof`运算符用于指针变量时,返回的是指针本身的大小,而不是指针所指向的对象或内存区域的大小。指针的大小取决于编译器和平台,通常在32位系统中为4字节,在64位系统中为8字节。例如: ```c int* ptr; printf("Size of pointer: %zu\n", sizeof(ptr)); // 在32位系统中输出4,在64位系统中输出8 ``` 2. **指针指向的类型大小**:`sizeof`运算符可以用于指针指向的类型,以确定该类型的大小。例如: ```c int* ptr; printf("Size of pointed type: %zu\n", sizeof(*ptr)); // 输出4,因为int通常是4字节 ``` 这种用法可以用于动态内存分配或数组操作中,以确保分配的内存大小正确。 3. **数组指针的区别**:当`sizeof`用于数组时,返回的是整个数组占用的内存大小。然而,当数组作为参数传递给函数时,它会退化为指针,此时`sizeof`将返回指针的大小,而不是数组的大小。例如: ```c void func(int arr[]) { printf("Size of array in function: %zu\n", sizeof(arr)); // 输出指针的大小,通常是4或8 } int main() { int arr[10]; printf("Size of array: %zu\n", sizeof(arr)); // 输出40(假设int为4字节) func(arr); return 0; } ``` 4. **注意事项**:在使用`sizeof`时,需要注意指针和数组的区别,以及指针指向的类型是否正确。此外,`sizeof`的返回值类型是`size_t`,这是一个无符号整数类型,通常使用`%zu`格式化字符串进行输出。 ### 示例代码 ```c #include <stdio.h> int main() { int* ptr; printf("Size of pointer: %zu\n", sizeof(ptr)); // 输出指针本身的大小 printf("Size of pointed type: %zu\n", sizeof(*ptr)); // 输出指针指向的类型的大小 int arr[10]; printf("Size of array: %zu\n", sizeof(arr)); // 输出整个数组的大小 void* voidPtr; printf("Size of void pointer: %zu\n", sizeof(voidPtr)); // 输出void指针的大小 return 0; } ``` ### 相关问题 1. `sizeof`运算符在C/C++中如何处理不同类型的数据? 2. `sizeof`运算符在数组和指针之间的行为差异是什么? 3. 如何在C/C++中使用`sizeof`进行动态内存分配? 4. `sizeof`运算符的返回值类型是什么,如何正确使用它?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌萌松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值