C语言字符指针输出与长度计算详解
在C语言中,字符指针常被用于处理字符串。本文深入解析为何使用%s格式符打印字符指针会显示文本内容,厘清指针变量地址、解引用内容与取址的区别,并提供一种无需标准库函数即可计算指向字符串长度的通用方法。
C语言字符指针的输出机制
C语言内部没有专门的字符串类型,字符串通常通过字符数组或字符指针来表示。当定义 char * p = "hello"; 时,系统会在内存(通常是只读数据段)分配空间存储字符串 "hello",并将该区域首地址赋值给指针变量 p。
很多初学者会疑惑:既然 p 是指针,本质上是一个地址值,为什么执行 printf("%s", p); 输出的是 hello 而不是内存地址?
原因分析:
- 结束标志: C语言编译器会自动在字符串末尾添加空字符
'\0'作为结束标记。
格式化参数:%s告诉printf函数,传入的参数是一个字符序列的起始地址。函数会从该地址开始逐个读取字符,直到遇到'\0'为止并停止输出。 - 其他输出方式:
- 若使用
%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 的结果即为跨越的非空字符个数,也就是字符串的实际长度。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













