【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !

目录

  • C语言中指针的大小
    • [1. 指针大小的基本概念](#1. 指针大小的基本概念)
      • [1.1 32位系统](#1.1 32位系统)
      • [1.2 64位系统](#1.2 64位系统)
    • [2. 指针大小示例](#2. 指针大小示例)
      • [2.1 32位系统输出](#2.1 32位系统输出)
      • [2.2 64位系统输出](#2.2 64位系统输出)
    • [3. 指针大小与数据类型无关](#3. 指针大小与数据类型无关)
    • [4. 跨平台的指针大小](#4. 跨平台的指针大小)
    • [5. 关键点总结](#5. 关键点总结)
      • [5.1 指针大小与平台关系](#5.1 指针大小与平台关系)
      • [5.2 跨平台编程注意事项](#5.2 跨平台编程注意事项)
    • [6. 指针大小示例总结](#6. 指针大小示例总结)
    • [7. 结束语](#7. 结束语)
    • 相关文章:

C语言中指针的大小

在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。通常情况下,所有类型的指针在同一平台上占用的内存大小是相同的。

1. 指针大小的基本概念

1.1 32位系统

在32位系统中,指针大小通常为4字节(32位)。

1.2 64位系统

在64位系统中,指针大小通常为8字节(64位)。

无论指针指向的数据类型是什么,在同一个系统和编译器环境中,所有指针的大小都是一致的。

2. 指针大小示例

我们可以通过编写简单的C程序来查看指针的大小。

c 复制代码
#include <stdio.h>

int main() {
    int *p1;
    char *p2;
    double *p3;
    void *p4;

    printf("Size of int pointer: %zu bytes\n", sizeof(p1));
    printf("Size of char pointer: %zu bytes\n", sizeof(p2));
    printf("Size of double pointer: %zu bytes\n", sizeof(p3));
    printf("Size of void pointer: %zu bytes\n", sizeof(p4));

    return 0;
}

在不同体系结构下运行该程序,将输出指针的大小。例如:

2.1 32位系统输出

c 复制代码
Size of int pointer: 4 bytes
Size of char pointer: 4 bytes
Size of double pointer: 4 bytes
Size of void pointer: 4 bytes

2.2 64位系统输出

c 复制代码
Size of int pointer: 8 bytes
Size of char pointer: 8 bytes
Size of double pointer: 8 bytes
Size of void pointer: 8 bytes

3. 指针大小与数据类型无关

指针的大小仅取决于平台和编译器,而与它指向的数据类型无关。这是因为指针只需存储内存地址,而不需要关心地址中存储的数据类型。

示例

c 复制代码
#include <stdio.h>

int main() {
    int a = 10;
    double b = 20.0;

    int *p1 = &a;
    double *p2 = &b;

    printf("Address of a: %p\n", (void*)p1);
    printf("Address of b: %p\n", (void*)p2);
    printf("Size of p1: %zu bytes\n", sizeof(p1));
    printf("Size of p2: %zu bytes\n", sizeof(p2));

    return 0;
}

无论指针p1指向int类型的变量还是指针p2指向double类型的变量,它们的大小在同一平台上都是相同的。

输出示例

在32位系统上:

c 复制代码
Address of a: 0xbffff4c8
Address of b: 0xbffff4cc
Size of p1: 4 bytes
Size of p2: 4 bytes

在64位系统上:

c 复制代码
Address of a: 0x7ffee9b7d8f0
Address of b: 0x7ffee9b7d8e8
Size of p1: 8 bytes
Size of p2: 8 bytes

4. 跨平台的指针大小

不同平台的指针大小不同。编写跨平台代码时需要注意这一点,特别是在涉及指针运算和内存分配时。例如,在序列化数据结构时,最好避免依赖特定平台的指针大小。

示例

c 复制代码
#include <stdio.h>

void print_pointer_size() {
    printf("Pointer size: %zu bytes\n", sizeof(void*));
}

int main() {
    print_pointer_size();
    return 0;
}

输出示例

在32位系统上:

c 复制代码
Pointer size: 4 bytes

在64位系统上:

c 复制代码
Pointer size: 8 bytes

5. 关键点总结

5.1 指针大小与平台关系

  • 指针的大小在同一平台和编译器下是固定的,与指向的数据类型无关。
  • 在32位系统上,指针大小通常为4字节。
  • 在64位系统上,指针大小通常为8字节。

5.2 跨平台编程注意事项

  • 编写跨平台代码时,需要注意指针大小的差异,避免平台依赖问题。
  • 可以通过运行时检查指针大小,以适应不同平台。

通过理解指针大小的这些基本概念,可以更好地编写健壮和可移植的C语言程序。

6. 指针大小示例总结

下面是不同系统上指针大小的总结表:

系统类型 指针类型 指针大小
32位系统 int * 4 字节
32位系统 char * 4 字节
32位系统 double * 4 字节
32位系统 void * 4 字节
64位系统 int * 8 字节
64位系统 char * 8 字节
64位系统 double * 8 字节
64位系统 void * 8 字节

理解这些概念和具体示例,可以帮助开发者在不同平台上更好地使用指针,编写出高效且健壮的C语言代码。

7. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言中的指针大小有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论 ,这对我们非常重要。再次感谢大家的关注和支持LuckiBit

相关文章:

相关推荐
无恃而安41 分钟前
011课程作业管理系统技术剖析:构建智能化教学管理平台
系统
whoarethenext8 小时前
c/c++的opencv图像金字塔缩放
c语言·c++·opencv·图像金字塔
apolloyhl12 小时前
C/C++ 面试复习笔记(2)
c语言·c++·算法·面试
jmlinux16 小时前
C 语言开发中常见的开发环境
c语言·开发语言·stm32·单片机
临溟夜空的繁星16 小时前
C语言——深入理解指针(1)
c语言·开发语言
明早你自己说17 小时前
根据Cortex-M3(包括STM32F1)权威指南讲解MCU内存架构与如何查看编译器生成的地址具体位置
stm32·架构·内存
草莓熊Lotso17 小时前
【C语言预处理详解(下)】--#和##运算符,命名约定,命令行定义 ,#undef,条件编译,头文件的包含,嵌套文件包含,其他预处理指令
c语言·开发语言·经验分享·笔记·其他
代码老y19 小时前
C语言进阶知识:深入探索编程的奥秘
c语言·开发语言·数据结构·算法
三体世界19 小时前
Linux --TCP协议实现简单的网络通信(中英翻译)
linux·c语言·开发语言·网络·c++·windows·tcp/ip
怀旧,20 小时前
【C语言】C语言经典小游戏:贪吃蛇(下)
c语言·开发语言·数据结构