要点:
1、指针
2、数组与字符串
1)指针
对于类型T,T*是“到T的指针”类型。
说白了讲,指针里保留的是一个32位的地址值,这个地址指向了一个内存区域,至于如何解释这个内存区域,则是由其类型决定。
如:char c=’a’;
char* p=&c;
通过一个完整的示例来看一下:
#include
using namespace std;
int main()
{
/*
//为了更直观,我们可以将测试的类型设为int
char c='A';
char* p=&c;
cout<<"c="<cout<<"*p="<<*p< cout<<"p="<<(int)p< //这里进行了强制转换输出
//如果不转换,输出的将是字符
*/
int c=100;
int* p=&c;
cout<<"c="<cout<<"*p="<<*p< cout<<"p="< return 0;
}
一个特殊的数字:0
当给一个指针赋值为0时,如char *p=0; 则表明该指针没有使用,也即没有指向任何一个位置。
2)数组与字符串
数组,通过在变量后面添加中括号[],然后在中括号[]里填上数组的个数:
如:
int num[10];
char ch[20];
double dd[15];
对数组的操作与引用,都是通过下标来完成的,如:num[0],num[1],……num[9]
注意一点:数组的下标是从0开始的,所以num[10]的第一个元素是:num[0],而最后一个
则是num[9]
3)
A)字符串的长度与大小
sizeof(“iawen”); //大小
strlen(“iawen”); //长度
/*
测试字符数组与字符串的差别
*/
#include
using namespace std;
int main()
{
//char ch[6]="iawen";
char ch[5]={'i','a','w','e','n'};
char tmp[]="teest";
cout<//cout<<"ch的长度是:"< //cout<<"ch的大小是:"< return 0;
}
B)对字符串的读取:
/*
测试读取字符串的溢出与正确读取
*/
#include
using namespace std;
int main(){
char ch[10]={0};
cout<<"please enter a string:\t";
//cin>>ch;
//ch[9]=0; //虽然截取了,但依然会覆盖到后面的数据
cin.getline(ch,10);
cout<<"You input is:\t";
cout<
return 0;
}
3)数组与指针
指针是操作数组的利器!
/*
测试数组的地址
*/
#include
using namespace std;
int main()
{
int num[10];
for(int i=0;i<10;i++)
num[i]=i+10;
cout<<"num数组的地址:"<cout<<"数组第1元素的地址:"<<&num[0]< cout<<"数组第2元素的地址:"<<&num[1]<
return 0;
}
利用指针来指向数组:
/*
测试对指针的操作
*/
#include
using namespace std;
int main()
{
int num[10];
int *p=num;
for(int i=0;i<10;i++)
*(p+i)=i+10;
cout<<"num数组的地址:"< cout<<"数组第1元素的地址:"< cout<<"数组第2元素的地址:"<
return 0;
}
4)引用(别名)
5)结构
#include
using namespace std;
struct people{
char name[10];
short age;
char addr[128];
};
int main()
{
people iawen;
cout<<"Please input your name、age and address:\n";
cin>>iawen.name>>iawen.age;
cin.get();
cin.getline(iawen.addr,128);
cout<<"\n\nyour name is: "<cout<<"your age is: "< cout<<"your address is: "<
return 0;
}