字符串、指针、引用、数组基础
1.字符串:
字符是由单引号所括住的单个字母、数字或符号。若将单引号改为双引号,该字符就会变成字符串。它们之间主要的差别是:双引号的字符串“A”会比单引号的字符串’A’在字符串的最后补上一个结束符’\0’(Null字符,ASCLL值为0)。
两种方式创建字符串:
1)字符串数组:
char str1[ ] = “This is a test ! “;
2)声明String类
#include<string>
string str2 = “This is a test ! “;
2.指针
1)取地址符:&
&变量名称; //获得变量所在的内存地址
2)指针变量:
用来存储内存地址的变量。
数据类型 *指针变量 = &变量名称;
3)指针数组:
一维指针数组的声明格式:
数据类型 *数组名[元素名称];
过去以二维的字符数组来存储字符串数组:
char name[4][10] = {“Justinian”, “Momo”, “Becky”, “Bush” };
现在可以改为声明一维字符串指针数组://将指针指向各个字符串的起始地址,如name[0]指向字符串“Justinian”
char *name[4] = {“Justinian”, “Momo”, “Becky”, “Bush” };
3.动态分配
内存在运行阶段分配,若指向动态分配内存空间的指针,在未释放该地址空间前又指向了别的内存空间,则原指向的内存空间将无法被释放,从而造成内存泄露。
1)动态分配变量:
声明格式:
数据类型 *指针变量 = new 数据类型(初值);
如:
int *ptr = new int;
delete ptr;
2)动态分配数组:
int *ptr = new int[ nop ]; //动态分配数组为nop个元素
delete []ptr;
4.引用
int j = 20;
int &refj = j ; //声明引用需使用取地址符号&,并且同时设置初值
注意:当refj成为j的别名后,就不能再将refj这个标识符重复声明为其他变量或对象的别名,并且所用作用于refj身上的运算处理都会同时作用到j身上。
5.指针引用
将引用的初值指向某个指针变量的地址。
如:
int Arr[3] = {1,2,3}; int* PtrArr = Arr; //声明指针变量PtrArr,并指向数组Arr的起始地址 int* &refArr = PtrArr; //声明指针引用refArr,来指向PtrArr for(int i=0;i<3;i++) cout<<*( refArr+i )<<“ “; cout<<endl;
#include <iostream> #include <cstdlib> usingnamespacestd; intmain(intargc, constchar* argv[]) { // insert code here... charName[] = "John"; char*p_N = "Marry"; //定义字符串指针 *p_N 并设置其初值 cout<<"Name[]的地址:"<<&Name<<" 字符串的内容:"<<Name<<endl; //由于传递字符指针给cout会直接显示出字符串,故使用强制类型转换(int *)来显示指针变量*p_N所指向的地址 cout<<"p_N的地址:"<<(int*)p_N<<" 字符串的内容:"<<p_N<<endl; return0; }
6.获取数组长度
int arr[] = {1,5,9,10,9,2};
length_arr = sizeof(arr)/sizeof(arr[0]);
len_arr = end(arr)-begin(arr);