程序设计日志16---指针2

1指向数组元素的指针
即数组元素的地址
指向变量的指针变量可以指向数组
(1)指针的加減
两个指针减表示两个指针所指的数据在存储位置上相差几个数据
指针加上或减去一个整数值(问隔数/偏移量),将指针定位到其他的
位置
代码:
int a [5]={1,2,3,4,5);
int *p=a;
//想指向数组时 直接等于数组名即
//cout<<*p<<endl;
int *d1=&a[0];
int *d2=&a [21;
cout<<d1<<d2<<endl;
//输出了两个元素的地址
cout<<d2-d1<<endl;
1/输出了相差几个
int al4=(1000,2,9,4);
int*p1=&a[11;
int*p2=&a[31:
cout<<p1-p2<<endl;
cout<<p1<<end;
cout<<p2<<endl;
cout≤<p2-2<sendl://输出地址
注意事项:
(1)当对一个指针做加减法时,其完成的是将内存中的指针向前或向后移动,其移动的步长对应于所指向的数据类型的字节长度,即
sizeof(type)
(2)不能对(void 大)进行加减运算,即sizeof(void)不成立
(3)不能随意将指针的类型进行转换,尽管指针的类型与地址值无关,但是会影响编译器对指针的理解。
2.
用指针变量作函数参数接收数组地址
代码:
int f(int*p, int n)
11 cout<<*(p+1):cout<<p[1);1/都表示下标为1的数组元素
*(p+1)=10;
}
int xint a [l,int n)
{
a[11=20;
int w(int c,int b)
c=c-10;
b=b-10;
cout<<C<<" * "<<b<<endl;
注意指向二维数组的不同类型的指针
二维数组的输出
int a[21[21=(1,2,3,4);
int(*p)[2];
p=a;
for (int i=0;¡<2;¡++)
{for (int j=0;j<2;++){
cout<<*(*(pti)+j<<endl;}
}
用指向数组的指针作函数参数
*int f(int(*p)[3J)//传二维数组的格式

{for (int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
cout<<**(p+i)+j)<<endl;
}
int a [2][3]={1,2,3,4,5,6);
f(a);
用字符指针指向一个字符串
char*a="hello world!";
coutssassendl;
用函数指针变量调用函数
(1)指向函数的指针变量存储函数的入口地址
(2)函数类型(*指针变量名)(形参表);
int f(int a,int b)
cout<<a-b<<end;
}
int(*p) (int, int);
*1*p=f;
p(2,3);
返回指针的函数
int*u(int*a,int*b)
{
return a;
}
int *p;
int a=5,b=7;

p=u(&a,&b);

cout<<*p<<endl;
指针数组
(1)数组的每一个元素都是一个指针
(2)类型名* 数组名[数组长度]:
int*p[2;
int a=3,b=7;
p[0]=&a;
p[1]=&b;
1/另一种形式 int*p 21={&a,&b;
cout<<*p[O]<<endl;//指向a
cout<<*(*(p+0))<<endl;
cout<<**p<<endl;
cout<<p[0]<<end;
cout<<*(p+0)<cendl;
指针数组与字符串选择排序
char*a[]=["abc","ab", "abcd" "abcde"};
for (int i=0;i<4;i++)
{
char*min=ail:
for (int j=i-j<4;j+ +)
if(stremp(a [i], min)>0)
{ a[i]=afil;

agEmin;
min=a [il;
JI}
for (int i=0;¡<4;it +)
cout<<a[i]<<endl;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值