C++计算sizeof 的值(指针和数组的大小计算)

本文详细解析了在C语言中,不同数据类型如字符串数组、指针及整型变量的大小计算方法。通过具体示例,阐述了在32位与64位系统下,这些类型所占内存字节数的区别,特别是数组作为形参时的特殊处理。

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

链接:https://www.nowcoder.com/questionTerminal/e29b5b80c95548218219359da07c12c3?orderByHotValue=0&done=0&pos=366&mutiTagIds=138&onlyReference=false
来源:牛客网
 

char str[] = "http://www.xxxxx.com" ;
char *p = str ;
int n = 10;
请计算
sizeof (str ) = 
sizeof ( p ) = 
sizeof ( n ) = 

void Foo ( char str[100]){

请计算 sizeof( str ) = 

}
void *p = malloc( 100 ); 请计算 sizeof ( p ) = 

 

 

正确答案:

1 21

2 4

3 4

4 4

5 4

解释:数组作为形参时,数组的数组名会退化成一个指向该类型数组的指针,只要是指针,在32位系统中所占的字节数就是4,在64位系统中所占的字节数是8.

### C++数组指针指针数组的区别 #### 指针数组 指针数组是一个数组,其元素都是指针类型的变量。这意味着每一个元素都可以存储一个地址。声明指针数组时需要指定数组大小以及指针所指向的数据类型。 ```cpp int* ptrArray[10]; // 声明了一个含有10个整数指针数组[^1] ``` 上述代码创建了一个名为 `ptrArray` 的数组,它可以保存十个指向整型数据的指针。每个指针可以独立地指向不同的内存位置。 #### 数组指针 数组指针则是指向整个数组指针。为了声明这种类型的指针,应该把星号放在圆括号内紧挨着指针名称之前,这样表明这是一个指向特定长度数组指针而不是简单的指针数组。 ```cpp int (*arrPtr)[4]; // 创建一个指向四个整数构成的数组指针[^2] ``` 这里定义了 `arrPtr` 是一个指向由四个连续整数组成的一维数组指针。当初始化或赋给这类指针时,通常传入的是某个实际一维或多维数组的名字作为右操作数。 #### 使用差异 对于 **指针数组** 来说,可以通过遍历的方式逐个访问各个指针成员并间接获取它们指向的对象: ```cpp for (size_t i = 0; i < sizeof(ptrArray)/sizeof(*ptrArray); ++i){ std::cout << *ptrArray[i] << ' '; } std::cout << '\n'; ``` 而对于 **数组指针**, 若要访问被指向的数组的内容,则需先解引用得到首元素的位置再进一步索引: ```cpp // 初始化一些测试数据 int data[] = {1, 2, 3, 4}; arrPtr = &data; // 访问第一个元素 std::cout << (**arrPtr) << "\n"; // 或者使用偏移量来访问其他元素 std::cout << (*(arrPtr))[2] << "\n"; // 输出第三个元素(下标从零开始计) ``` 需要注意的是,在处理数组指针的时候一定要确保不会发生越界读写行为,因为这可能导致程序崩溃或者其他未定义的行为[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值