C++指针与字符串

来源:互联网 发布:淘宝新宝贝如何引流 编辑:程序博客网 时间:2024/06/07 13:34

C语言里没有字符串数据类型,要想获得字符串的表示形式利用字符数组

#include<iostream>using namespace std;#include<stdlib.h>void main(){char ar[]={'a','b','c','d'};cout<<ar;   //字符串后无结束符\0,会有多余打印cout<<endl;char br[]={'a','b','c','d','\0'};cout<<br;cout<<endl;char cr[5]="abcd";   //字符串结尾默认隐藏了\0cout<<cr;system("PAUSE");}


C语言里没有字符串数据类型,要想获得字符串的表示形式利用字符指针

#include<iostream>using namespace std;#include<stdlib.h>void main(){char *p="hello world";cout<<p;   //整形的指针,打印指针时只能打印其内部地址//字符指针,打印指针时也是地址,但是这个被看作字符指针后,会打印该指针指向地址内存放的字符串,打印直到遇到\0为止system("PAUSE");}

静态常量区的字符串存储及指针访问
#include<iostream>using namespace std;#include<stdlib.h>#include<string.h>void main(){char *p="hello world";   //hello world存放在内存的静态常量区//指针变量p存储的是该静态常量区的首个字符地址//不能通过指针修改静态常量区的字符,但是可以通过指针访问int length=strlen(p);   //strlen计算的是字符串p的有效长度,不算\0for(int i=0;i<length;++i){cout<<p[i];}system("PAUSE");}


字符数组与被字符串赋值的指针的区别:

字符数组的存储与指针所指字符串的存储形式不同

#include<iostream>using namespace std;#include<stdlib.h>void main(){char *p="hello world";   //hello world位于静态常量区,字符指针存储了字符串首元素的地址char ar[]={'a','b','c','d','\0'};   //自己开辟的存储字符数组空间位于栈区,数组对每个字符变量进行了存储ar[0]='A';}

指针可以通过指针名改变指向,但字符数组不能通过数组名改变指向

#include<iostream>using namespace std;#include<stdlib.h>void main(){char *p="hello world";   //指针p空间存hello world的首地址char *str="abcdef";   //指针str空间存abcdef的首地址p=str;   //将指针str的值(abcdef的首地址)赋值给指针p//指针p空间存储了abcdef的首地址,从而改变了指针p的指向system("PAUSE");}
指针初始化是把字符串的首地址赋值给指针,但对字符数组初始化是把每个字符存放到数组空间

编译时为字符数组分配若干存储单元,以存放各元素的值,但对字符指针变量,只分配一个存储单元,用于字符串首元素的存放地址





原创粉丝点击