int类型指针和字符串类型指针的差别

在C/C++中,int类型指针和字符串类型指针(通常指char*)虽然都是指针,但在用法和语义上有显著差别。以下是主要区别:


1. 指向的数据类型不同

  • int*(整型指针)
    指向一个或多个整型数据(int)。

    c

    复制

    下载

    int num = 42;
    int* pInt = # // 指向单个int
    int arr[] = {1, 2, 3};
    int* pArr = arr;  // 指向int数组
  • char*(字符指针/字符串指针)
    通常指向字符数组(即C风格字符串),以空字符\0结尾。

    c

    复制

    下载

    char str[] = "Hello";
    char* pStr = str; // 指向字符串的首字符

2. 解引用时的行为不同

  • int*
    解引用后访问的是一个完整的int值(通常是4字节,取决于平台)。

    c

    复制

    下载

    int x = *pInt; // 获取pInt指向的整数值(如42)
  • char*
    解引用后访问的是单个字符(1字节)。

    c

    复制

    下载

    char c = *pStr; // 获取pStr指向的字符(如'H')

3. 指针运算的步长不同

  • int*
    指针加减的步长为sizeof(int)(如+1跳过4字节)。

    c

    复制

    下载

    pInt++; // 指向下一个int(地址增加4字节)
  • char*
    指针加减的步长为sizeof(char)(即1字节)。

    c

    复制

    下载

    pStr++; // 指向下一个字符(地址增加1字节)

4. 字符串指针的特殊语义

  • char*
    可以指向字符串字面量(常量),但修改它是未定义行为(可能导致崩溃)。

    c

    复制

    下载

    char* pLiteral = "Hello"; // 指向只读内存
    // pLiteral[0] = 'h'; // 错误!不允许修改
  • int*
    无此类特殊语义,通常指向可修改的内存。


5. 输入/输出处理

  • int*
    用于传递整型变量或数组的地址(如scanf输入):

    c

    复制

    下载

    scanf("%d", pInt); // 通过指针修改int值
  • char*
    可直接用于字符串输入/输出(如printf/scanf):

    c

    复制

    下载

    printf("%s", pStr); // 输出整个字符串
    scanf("%s", pStr);  // 输入字符串(需确保内存足够)

6. 内存布局

  • int*
    指向的数据可能是单独变量或数组,无终止符。

  • char*
    字符串以\0结尾,需确保内存分配足够(如strlenstrcpy依赖终止符)。


示例对比

c

复制

下载

int nums[] = {10, 20, 30};
int* pNums = nums;    // 指向int数组
char name[] = "Alice";
char* pName = name;   // 指向字符串

printf("%d\n", *pNums);    // 输出: 10(解引用int)
printf("%c\n", *pName);    // 输出: 'A'(解引用char)
printf("%s\n", pName);     // 输出: "Alice"(字符串语义)

关键区别总结

特性int*char*(字符串指针)
指向类型整型(int字符(char
解引用结果整数值单个字符
指针运算步长sizeof(int)sizeof(char)(1字节)
终止符\0结尾
输入/输出需格式化为%d可直接用%s处理字符串
常量字面量无特殊语义可能指向只读内存

理解这些区别能帮助避免常见的指针误用(如越界访问或类型不匹配)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值