c - 使用指针存储字符串
问题描述
我开始学习 C 语言中的指针。在遇到“使用指针存储字符数组”主题之前,我理解得很好。一个突出我怀疑的示例程序如下
#include <stdio.h>
main()
{
char *string;
string = "good";
printf ("%s", string);
}
这将打印字符串,即,好。
指针应该存储内存地址,或者换句话说,我们将变量的地址(使用地址运算符)分配给指针变量。我不明白的是我们如何能够将字符串直接分配给指针?那也没有地址运算符?另外,我们如何在没有间接运算符 (*) 的情况下打印字符串?
解决方案
像这样的文字字符串"good"
实际上存储为(只读)字符数组。此外,C 中的所有字符串都必须以特殊的“空”字符结尾'\0'
。
当你做评估时
string = "good";
真正发生的是你string
指出了该数组中的第一个字符。
处理字符串的函数知道如何处理这样的指针,并且知道如何使用指针遍历此类数组以查找字符串中的所有字符,直到找到终止符。
稍微不同地看一下,编译创建了它的数组
char internal_array[] = { 'g', 'o', 'o', 'd', '\0' };
然后你string
指向数组中的第一个元素
string = &internal_array[0];
请注意,&internal_array[0]
实际上等于internal_array
,因为数组自然会衰减为指向其第一个元素的指针。
推荐阅读
- elasticsearch - ElasticSearch - 获取搜索值的键
- php - CakePHP 从不同视图登录
- r - 过滤 R 数据框后,所有行都更改为 NA
- c# - Dijkstra's Algorithm Ineffeciencies on a Hex Grid, C#, Unity3D
- java - Java类中使用Kotlin注解类
- c++ - C++ 标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- java - 始终添加到最后一个 Listitem 位置并保持它
- android - 如何在测验应用程序中检查洗牌数组的答案
- google-visualization - 具有多个数据的谷歌折线图
- python - 尝试在 python2 中创建有限的数字序列:IndexError(初学者)