C语言字符指针输出与长度计算详解

Aria
Aria
发布时间:2026-10-15 | 4人浏览过
原创

在C语言中,字符指针常被用于处理字符串。本文深入解析为何使用%s格式符打印字符指针会显示文本内容,厘清指针变量地址、解引用内容与取址的区别,并提供一种无需标准库函数即可计算指向字符串长度的通用方法。

C语言字符指针的输出机制

C语言内部没有专门的字符串类型,字符串通常通过字符数组或字符指针来表示。当定义 char * p = "hello"; 时,系统会在内存(通常是只读数据段)分配空间存储字符串 "hello",并将该区域首地址赋值给指针变量 p。

很多初学者会疑惑:既然 p 是指针,本质上是一个地址值,为什么执行 printf("%s", p); 输出的是 hello 而不是内存地址?

原因分析:

  1. 结束标志: C语言编译器会自动在字符串末尾添加空字符 '\0' 作为结束标记。
    格式化参数: %s 告诉 printf 函数,传入的参数是一个字符序列的起始地址。函数会从该地址开始逐个读取字符,直到遇到 '\0' 为止并停止输出。
  2. 其他输出方式:
    • 若使用 %p 或 "地址:%d" 等格式,将直接打印指针存放的地址数值。
    • 若使用解引用操作 *p,仅获取并输出指针当前指向的首个字符。

核心概念辨析:p、*p 与 &p

  • p (指针变量本身): 存储的是字符串第一个元素(如 'h')所在的内存地址。初始化后,其持有的地址值固定不变。
  • *p (解引用): 表示访问该地址处的具体值,即取出字符串的第一个字符 'h'。
  • &p (取指针地址): 指获取指针变量 p 自己在栈内存或其他存储空间中的存放地址,该地址与 p 的值(即字符串首地址)截然不同。

通过指针手动计算字符串长度

在实际开发中,有时需要不依赖 <string.h> 中的 strlen 函数来计算长度。利用指针算术运算,可以通过移动“头尾”两个指针来统计有效字符数。

int stren(char* str){
	char* start=str;
	char* end=str;
	while(*end!='\0'){
		end++;
	}
	return end-start;
}
#include<stdio.h>
int main(){
	char arr[]="bit";
	int len=stren(arr);
	printf("%d\n",len);
return 0;
}

逻辑说明:

上述代码维护了两个指针。首先让 start 和 end 同时指向字符串头部。随后循环递增 end 指针,直至它指向结束符 '\0'。此时,end - start 的结果即为跨越的非空字符个数,也就是字符串的实际长度。

以上就是关于C语言字符指针输出表现与长度计算的详细内容,更多关于C指针进阶的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表