指针的大小是问:一个指针变量占用多少内存空间?
分析:既然指针只是要存储另一个变量的地址,。注意,是存放一变量的地址,而不是存放一个变量本身,所以,不管指针指向什么类型的变量,它的大小总是固定的:只要能放得下一个地址就行!(这是一间只有烟盒大小的“房间”,因为它只需要入一张与着地址的纸条)。
存放一个地址需要几个字节?答案是和一个 int 类型的大小相同:4字节。
所以,若有:
int* pInt;
char* pChar;
bool* pBool;
float* pFloat;
double* pDouble;
则: sizeof(pInt)、sizeof(pChar)、sizeof(pBool)、sizeof(pFloat)、sizeof(pDouble)的值全部为:4。
PS:你敢拆电脑吗?拆开电脑,认得硬盘数据线吗?仔细数数那扁宽的数据线由几条细线组成?答案:32条,正是 4 * 8。
附:sizeof和strlen的区别
❀第一个例子:
char* ss = "0123456789";
1、sizeof(ss)的结果是4,ss是指向字符串常量的字符指针
2、sizeof(*ss)的结果是1,*ss是第一个字符
❀第二个例子:
char ss[] = "01233456789";
1、sizeof(ss)结果是11,ss是数组,计算到'\0'的位置,因此是10+1
2、sizeof(*ss)结果是1,*ss是第一个字符
❀第三个例子
char ss[100] = "0123456789";
1、sizeof(ss)的结果是100,ss表示在内存中预分配的大小:100*1
2、strlen(ss)的结果是10,它的内部实现是用一个循环计算字符串的长度,直到'\0'为止。
❀第四个例子
int ss[100] = "0123456789";
1、sizeof(ss)的结果是400,ss表示在内存中的大小,为100*4
2、strlen(ss)错误,strlen的参数只能是char*,且必须是以'\0'结尾的。
注:笔者试验时无法对ss初始化
error message:
error C2075: 'ss' : array initialization needs curly braces
分享到:
相关推荐
了解指针的大小有助于理解指针表达式的左值性质以及在内存管理中的作用。 指针的算术运算,如`ptr++`或`ptr-=5`,是C语言中独特的操作。这些运算会改变指针的值,使其指向内存中的下一个或前一个元素,根据指针所...
`sizeof`运算符可以用来确定指针的大小。 接着,文章讨论了指针的算术运算。指针可以加上或减去整数,但这里的加减不是简单的数值运算,而是基于指针所指向的类型调整地址。例如,如果`int *ptr`指向一个`int`数组...
当一个指针加上一个整数时,实际上是将指针的值(地址)加上了整数乘以指针所指向类型的大小。例如,如果`ptr`是一个指向`int`类型的指针,在32位系统中,`ptr++`会使得`ptr`的地址增加4个字节,指向下一个`int`变量...
例如,`ptr++`操作会使指针的值增加一个`sizeof(int)`大小的地址,因为`ptr`是一个`int`类型的指针。 4. **指针占据的内存**:每个指针变量本身也需要占据内存空间,其大小可以通过`sizeof`函数计算。在32位系统中...
通过理解指针的基本概念、声明方式以及应用场景,可以更好地利用指针来解决复杂的编程问题。此外,正确管理内存分配和释放也是开发过程中不可或缺的一部分。希望以上内容能够帮助你更好地理解和运用C语言中的指针。
// 输出指针的大小 return 0; } ``` #### 七、运用举例 通过实际的例子来加深对指针的理解是非常重要的。下面是一个简单的交换两个变量值的例子: **示例**: ```c void swap(int *a, int *b) { int temp = *a;...
4. **指针本身占据的内存区**:每个指针在内存中都有自己的存储空间,它的大小可以通过`sizeof(指针类型)`得到。在32位系统中,一般指针占用4个字节。 **指针的算术运算**是另一个关键点。指针可以加上或减去整数,...
- 动态分配内存并指向这块内存:`int *p = (int*)malloc(sizeof(int));` **指针与地址运算符**: - 地址运算符`&`用来获取变量的地址。 - 解引用运算符`*`用来访问指针所指向的内存地址中的值。 **综合示例**: ...
### C++指针详解 ...虽然刚开始学习时可能会遇到一些困难,但只要掌握了其基本原理和用法,就能够有效地利用指针来解决各种编程问题。希望本文能帮助大家克服对指针的恐惧,并能够熟练地运用到实际开发中去。
- `sizeof(ppa)`和`sizeof(*ppa)`:`ppa`是一个指向字符数组的指针,`*ppa`是一个包含10个字符的数组,所以`sizeof(ppa)`返回指针大小(4字节),`sizeof(*ppa)`返回10。 2. 字符串常量与字符数组: - `sizeof(pc...
这里的`p`是一个指针,它可以直接指向一个大小为5的整型数组。当你通过`p`访问数组时,`p`实际上是指向整个数组的首地址。 2. 指针数组:指针数组则是一个数组,其每个元素都是一个指针,例如`int *p[5]`。这意味着...
- `sizeof(*a)`返回一个3行6列的`double`指针数组的大小,即72字节(假设指针大小为4字节)。 - `sizeof(**a)`返回一列`double`指针数组的大小,即24字节(6个指针,每个4字节)。 - `sizeof(***a)`返回一个`...
总的来说,通过`sizeOf`计算Java对象的大小是一项复杂的工作,涉及到JVM内部的内存管理和对象表示。尽管Java API没有直接提供这样的功能,但我们可以借助第三方库或自定义工具来实现。理解对象大小对于优化内存使用...
- 对于指针,`sizeof`返回指针本身占用的内存大小,通常为4或8字节,取决于系统架构。 2. `sizeof`与表达式: - `sizeof`可以用于表达式,但注意它在编译时计算,不会考虑运行时的值。例如,`sizeof(a+b)`返回的...
尝试使用 `sizeof` 获取函数指针或函数名称的大小是不允许的,会引发编译错误。 2. **类型名与括号**:在使用 `sizeof` 时,必须正确地使用括号。 - 示例: ```cpp cout << sizeof(int) ; // 正确,获取 int ...
`sizeof`数组名会返回整个数组的大小,而`sizeof`指针则仅返回指针本身(通常是4字节或8字节,取决于系统架构)。 5. **示例分析** 在提供的代码示例中,可以看到`sizeof`的各种用法和注意事项的体现。例如: - `...
`中的`ptr`本身占用一定大小的内存(通常是4字节或8字节,取决于系统的位宽)。 #### 三、实际应用 理解这些概念后,我们可以更好地使用指针进行编程: 1. **数组与指针**:数组名本身就是指向数组第一个元素的...
- 算术运算:指针可以进行加减运算,但必须基于其指向的数据类型大小。例如,对于int *p,p++会使p指向下一个int变量的位置。 4. 指针与数组 - 数组名实际上是一个指向数组首元素的指针,因此可以使用指针遍历...
### C++中的`sizeof`运算符与类大小 在C++编程语言中,`sizeof`运算符被广泛用于获取变量、类型或数据结构所占用的内存空间大小(以字节为单位)。对于基本数据类型来说,`sizeof`的计算相对简单直观;然而,当涉及...
野指针可能导致程序的崩溃和内存泄露等问题。 Const 修饰指针 ---------------- Const 修饰指针是指针中的一个特殊类型,用于表示常量指针。Const 修饰指针可以防止指针的修改和操作。 通过本文,我们可以看到C++...