c++数组指针字符串

东南大学第六章数组指针与字符串视频教程笔记
(一)数组
cin.get(C)   iostream 流里的cin函数下的,从键盘上读一个字符
             如果读入ctrl+z 则为假,退出。
c++按行优先分配内存,matlab反之。
多维数组按维次序存储,越右边的下标变化越快。
数组名作参数传进函数,传的数组首地址,形参的改变直接影响实际的数组
sum(int a[][4],int nrow)    //该形参可以未知行列数
{...}
void main()
{
sum(A,3);
}
源码见文末

对象数组初始化,每个对象都要经过构造函数,析构函数(缺 省的)

 

(二)指针
不要用一个内部auto型变量去初始化static型指针   从作用域来考虑
void *pv;指针存在,不知道存放的什么类型。
指针p加上或减去n,其意义是指针当前指向位置的前方或后方(第n个数据)的地址
int 的话的就是移动4个字节
类型标识符 类型说明 长度(字节) 范围 备注
char         字符型          -128 ~ 127 -27 ~ (27 -1)
unsigned char 无符字符型  0 ~ 255 0 ~ (28 -1)
short int 短整型          -32768 ~ 32767 2-15 ~ (215 - 1)
unsigned short int 无符短整型  0 ~ 65535 0 ~ (216 - 1)
int         整型          -2147483648 ~ 2147483647 -231 ~ (231 - 1)
unsigned int 无符整型  0 ~ 4294967295 0 ~ (232-1)
float     实型(单精度)  1.18*10-38 ~ 3.40*1038 7位有效位
double         实型(双精度)  2.23*10-308 ~ 1.79*10308 15位有效位
long double 实型(长双精度    10 3.37*10-4932 ~ 1.18*104932 19位有效位
数组指针:int (*a)[3]

int a[10],*p
p=a;
p++;       a++;(错误的) a是数组首地址是常量(const)

指针数组:int *a[3]   相当于定义了int *a[0],*a[1],*a[2]
数组指针:int (*a)[3]  定义了一个指针,指向一个包含三个数的数组

指向常量的指针:不能通过指针来改变所指对象的值。
例:const int *pn=&a;
    *pn=6;  (错误)
    pn=&b; (正确)
指针常量:指针本身的值不能被改变。
例:int *const pn=&n1;
    pn=&n2;  (错误)
    *pn=6;  (正确)
对于常量意味着只能使用不能改变。

对象指针
void main()
{
   Point A(5,10);
   Point *ptr;
   ptr=&A;
   int x=ptr->GetX();
}

 

(三)动态存储分配
new
T *p=new 类型名T (初值列表)
delete 指针P  (p是new操作的返回值)

分配数组
int *p=new int[3];
delete[] p;

int (*p)[3] ;
p=new int[2][3];
delete p;

指针作为函数参数
实参是数组名,形参为指针

指向指针的指针。
函数指针
(四)字符串
例:
char a[4],*p1,*p2;

a="abc";
cin>>p1;
(错误)
p1="abc";
p2=a;
cin>>p2;
(正确)

字符串的输入输出
char c[]="china"
cout<<c;
区别于
int c[]={1,2,3}
cout<<c;

整行输入字符串

cin.getline
cin.get
可以读入带空格,输入输出流
cin.getline(a,80,',');
cin.getline(b,80,'\n');
strcat(连接)  strcpy(复制)  strcmp(比较)  strlen(求长度) 
strlwr(转换为小写)      strupr(转换为大写)

#include iostream.h
void sum(int a[][3],int x,int y)
{
   int i,j,sum=0;
   for(i=0;i
    for(j=0;j
     sum+=a[i][j];
     cout<<sum<<endl;
  sum=0;
   }
}
void main()
{
 int A[2][3]={1,2,3,4,5,6};
 sum(A,2,3);
}

典型例题
#include iostream.h
#include iomanip.h

void print(long *a,int n)
{
   cout<<"数组的地址: ";
   for(int i=0;i
    cout<<unsigned long(a+i)<<endl;
   for(i=0;i
    cout<<*(a+i)<<endl;
}
void main()
{
    long a[10]={1,2,3,4,5,3,6,7,8,9};
 print(a,10);
}

#include iostream.h
void main()
{
    int *p=new int[10];
 for(int i=0;i<10;i++)
  *(p+i)=i;
 for(i=0;i<10;i++)
  cout<<*(p+i)<<endl;
 delete[] p;
}

#include iostream.h
#include string.h
void main()
{
   char p[10];
   cin.getline(p,10,'\n');
   cout<<p<<endl;

   char *a="liye";
   cout<<a<<endl;
}

#include iostream.h
#include string.h
void main()
{
   char p[10];
   cin.getline(p,10,'\n');
   cout<<p<<endl;

   char *a="liye";
   cout<<a<<endl;

    char *b=strcat(p,a); //赋值
 cout<<b<<endl;

   strcpy(b,p);
   cout<<b<<strlen(b)<<endl;

   cout<<strcmp(b,p)<<endl;

   a=strupr(p);
   cout<<a<<endl;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值