• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

C学习-基础:字符串的指针变量

指向字符串的指针变量

字符串的表示形式

字符串是特殊的常量,它一般被存储在一维的字符数组中,并以‘\0’结束。字符串与指针也有着密切关系。

对字符串的访问方法

1、采用字符数组:将字符串存放在字符数组中,以空字符’\0’结束;

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int waitag;
    
    char string[] = "Beijing Olympics";
    int i;
    for (i = 0; string[i] != '\0'; i++) // 通过下标逐个输出字符数组中的所有数组元素
        printf("%c", string[i]);
    printf("\n");
    printf("% s\n", string); // 从数组名 string 指向的元素开始,输出字符串到‘\0’为止
    
    scanf("%d", &waitag);
    return 0;
}

结果

Beijing Olympics
Beijing Olympics

C语言中规定,数组名代表数组的首地址数组第0号数组元素地址(或指针)所以将字符串存储到一个数组中后,就可以通过该数组名对它进行存取

由于string+i是一个地址,则*(string+i)表示其内容,它与数组元素string[i]等价。

2、采用 字符指针

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int waitag;
    
    char *string = "Beijing Olympics";
    printf("%s\n", string); // 通过 指针变量名 输出字符串
    
    scanf("%d", &waitag);
    return 0;
}

结果

Beijing Olympics

注意,在对字符指针变量string赋初值时,并不是把整个字符串的内容都赋给该字符指针变量,而是把该字符串在内存单元的首地址赋给该字符指针变量,这样就可将字符指针指向字符串的第一个字符。

在C语言中,对字符串常量的存放静态字符数组处理的,即在内存中给字符数组分配一片连续的存储单元,用来存放该字符串常量,每个字符占用一个字节。

在内存中,由于字符串最后被自动加了一个‘\0’,所以使用字符指针变量来处理字符串时就很容易判断字符串的终止位置。由此,使用字符数组名或字符指针变量可以整体输出一个字符串。 

若使用字符指针变量处理字符串,输出时要使用“%s”格式符,输出项中要给字符指针变量名。先输出字符指针变量所指向字符串的第一个字符,然后字符指针变量自动加1,指向下一个字符并输出该字符,…,重复上述操作,直到遇到 ‘\0’为止。

字符指针变量字符数组 的对比

 使用字符数组字符指针变量都可以实现字符串的存储和运算,两种方式既有相同之处,也有区别。详见下表。

image.png

字符串作函数参数

 使用地址传递的方法(即用字符数组名作函数参数或者用指向字符串的指针变量作函数参数),可以将一个字符串从一个函数传递到另一个函数。


 

0
0
下一篇:C学习-基础:指针数组 及其 作为 main函数的形参

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。