C語(yǔ)言怎樣用指針指向字符串
字符串的定義和使用
part 1 指針定義字符串
指針定義字符串,輸出它的地址:
#include<stdio.h>
int main()
{
char *s1="Hello World";
char *s2="Hello World";
printf("0x%p\n",s1);
printf("0x%p\n",s2);
}
這時(shí),出現(xiàn)地址相同的情況,說(shuō)明這里的“Hello World”只是存儲(chǔ)在一個(gè)臨時(shí)的地方,兩個(gè)指針同時(shí)指向了這個(gè)“Hello World”,這時(shí)字符串不可寫(xiě)。
什么叫不可寫(xiě)?看下面。
part 2 數(shù)組定義字符串
#include<stdio.h>
int main()
{
char s3[]="Hello World";
char* s;
s=s3;
printf("s3:0x%p\n",s3);
printf("s:0x%p\n",s);
s3[0]='B';
printf("%c\n",s3[0]);
printf("%s\n",s3);
printf("%s\n",s);
printf("%d\n",sizeof(s3));
}
用數(shù)組定義字符串,字符串可寫(xiě),這時(shí)s3[0]=‘B’,結(jié)果可以改變就叫做字符串可寫(xiě)。part1里的字符串不能改變,s3[0]='B’語(yǔ)句沒(méi)有作用。
這里用數(shù)組定義字符串后,再用指針指向這個(gè)字符串,和part1相比,地址復(fù)雜了許多,說(shuō)明這個(gè)地址不是臨時(shí)地址了。
計(jì)算字符串長(zhǎng)度12,Hello World+\0,\0也占有字符串的一位,但是不會(huì)顯示出來(lái)。
part 3 指針指向字符串
下面給出指針指向字符串的兩種方式:
\0才代表一個(gè)字符串的結(jié)束,\0才代表一個(gè)字符串的結(jié)束,\0才代表一個(gè)字符串的結(jié)束。它是數(shù)組的一部分。
#include<stdio.h>
int main()
{
char b[]={'t','i','t','t','l','e','\0'};
char* a;
a=b;
printf("%s\n",a);
}
//或
#include<stdio.h>
int main()
{
char b[]="tittle";//這和上面char b[]={'t','i','t','t','l','e','\0'};是相等的。
char* a;
a=b;
printf("%s\n",a);
}
當(dāng)你不需要對(duì)字符串改變時(shí),臨時(shí)用指針定義也可以的:
#include<stdio.h>
int main()
{
char *b="tittle";
char *a;
a=b;
printf("%s\n",a);
}
下面上一個(gè)帶有思考性的問(wèn)題,下面的指針事實(shí)上是直接指向一個(gè)數(shù)組元素‘s’的,數(shù)組最后沒(méi)有‘\0’。
當(dāng)你硬要以字符串形式輸出時(shí):
#include<stdio.h>
int main()
{
char n[1]={'s'};
char* a;
a=n;
printf("%c\n",a[0])
printf("%s\n",a);
} 
結(jié)果出錯(cuò)。
修正:
#include<stdio.h>
int main()
{
char n[]={'s','\0'};
char* a;
a=n;
printf("%c\n",a[0])
printf("%s\n",a);
} 
這個(gè)結(jié)果正確,指針指向了數(shù)組中的字符串。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
c語(yǔ)言 樹(shù)的基礎(chǔ)知識(shí)(必看篇)
下面小編就為大家?guī)?lái)一篇c語(yǔ)言 樹(shù)的基礎(chǔ)知識(shí)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
C++中字符串全排列算法及next_permutation原理詳解
這篇文章主要為大家詳細(xì)介紹了C++中字符串全排列(遞歸法)和(迭代法)以及next_permutation底層原理,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-02-02
C語(yǔ)言詳解如何實(shí)現(xiàn)堆及堆的結(jié)構(gòu)與接口
堆是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個(gè)可以被看做一棵完全二叉樹(shù)的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將詳細(xì)介紹堆的結(jié)構(gòu)與接口,需要的可以參考一下2022-04-04
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷小程序
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷小程序,一款大眾類的益智小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
C語(yǔ)言數(shù)據(jù)在內(nèi)存中的存儲(chǔ)詳解
本篇文章是C語(yǔ)言編程篇,主要為大家介紹C語(yǔ)言編程中數(shù)據(jù)在內(nèi)存中存儲(chǔ)解析,有需要的朋友可以借鑒參考下,希望可以有所幫助2021-09-09
C語(yǔ)言棧的表示與實(shí)現(xiàn)實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言棧的表示與實(shí)現(xiàn),對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法的研究有一定的借鑒價(jià)值,需要的朋友可以參考下2014-07-07
C++實(shí)現(xiàn)希爾排序(ShellSort)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)希爾排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C++實(shí)現(xiàn)LeetCode(95.獨(dú)一無(wú)二的二叉搜索樹(shù)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(95.獨(dú)一無(wú)二的二叉搜索樹(shù)之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

