数组指针字符串,对象与指针。
先看两个题目:
(第1题,会让你基本上对字符串跟数组的差别有所了解;第2题会让你了解C++的一些存储机制)
第1个:
(1)char c[]="12345/0/0"; //(2) int c[]={1,2,3,4,5};
(1)char *p=c;//(2) int *p=c;
c=p=__
&c==&p?1:0=__
c[0]=*c=__
&c[0]=&(*c)=__
c+2=&C[2]=__
sizeof(c)=__
sizeof(p)=__
把(1)换成(2)时输出结果又是怎样?
第2个:
例1)void main()
{char s[]="12345"; //char *s="12345";
*s='a';
cout < <s < <endl;
}
程序会报错吗?
例2)const char str1[]="aaa";
char str2[]="aaa";
const char *str3="aaa";
char *str4="aaa";
if(str1==str2) cout < <"12 OK" < <endl;
if(....换成其它的).................
请问str1,str2,str3,str4哪两个会相等。
一:数组
一维数组:声明初始化形式有三种:给定个数,逐个赋值;给定个数,部分赋值;不给个数,全部赋值。
例:int a[8]={1,2,3,0,0,0,0,0}; int a[8]={1,2,3,,}; int a[]={1,2,3,,,,,};
二维数组:声明初始化形式跟一维类似:
int b[2][3]={ {1,2,3},
{4,5,6}};
[ 或int b[2][3]={1,2,3,4,5,6};]
或:将int b[2][3]换为int b[][3],
或:int [3][3]={{1,2,3};
{4,5,6}};
对象数组:只声明不初始化,类定义中必须有一个显式的无参构造函数。
二:字符串
与数组不同的是,字符串只能在声明语句中进行初始化。而且指针形式与数组形式的初始化机制在存储方式上是完全不同的。
#include <iostream.H>
void main()
{char str[]="abcdefg"; //char *str="abcdefg";
str[5]='5';
cout<<str<<endl;
}
以上测试程序,如果是str[]程序编译运行都正常,如果换做*str,程序运行会发生异常。