数组和指针

本文详细介绍了C++中指针与数组的关系及其应用,包括指针作为函数参数、数组名与指针的关系、多维数组的指针操作、字符串指针的应用以及指针数组的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 首先说一个指针作为函数参数传递的问题

要在主函数里面使用被调函数里改变的参数值,就要使用指针变量作为函数形参,这样在被调函数执行的过程中,让指针变量指向的变量的值发生变化,变化的变量值就被保存下来了

2. 数组名代表数组中第一个元素的地址

int *p=&a[0]

int *p=a;        //这两句作用相同

3. 若指针变量p已经指向一个数组元素,则p+1就可以表示指向下一个元素

4. *p++相当于*(p++),*p++是先得到p指向的变量的值,再让p指向下一个元素

*++p是先让p加一,在取加一之后的值

5. 多维数组和指针

int a[2][3]={{1,3,5},{4,5,6}};
cout<<*(a[0]+2)<<endl;  //输出5

二维数组a可以看作三个一维数组组成的,a[0]表示第一行的首地址

此时定义int *p=a,  是错的,因为p是指向整型数据的,但是a是指向二维数组的首行,即a[0]

此时定义int (*p) [3]=a  ,是正确的,可以指向a的第一行元素(括号不能省略),此时p+1表示指向下一个一维数组

例子:

#include<iostream>
#include<string>
using namespace std;
int main()
{
int a[2][3]={{1,3,5},{4,8,6}};
cout<<*(a[0]+2)<<endl;  //输出的是第一行的第三个元素5
cout<<a[1]<<endl;   //输出第二行的地址
int *p1=a[0];   //指向a[0]一维数组的第一个元素
int (*p2)[3]=a;  //p2指向一个一维数组,指向a的第一行,a是数组名,代表首行的地址,而首行就是一个一维数组
cout<<*(p1+1)<<endl;  //输出的是3
cout<<*(p2+1)<<endl;  //p2是指向一个一维数组的,所以加1就表示指向下一个数组,所以输出第二行的地址,相当于a[1]
cout<<*(*(p2+1)+1)<<endl;  //指向第二行的第二个元素,即8


}

6. 字符串和指针

char s[]="Hello";
char *p_s=s; //指向字符串的首个字符
cout<<*p_s<<endl;  //输出的是s的第一个字符
cout<<p_s;// 输出的是整个字符串,和整型数组的有点不一样

7.指针数组

int main()

{

void sort(char* name[],int n);
void print(char* name[],int n);
char *name[]={"abc","Name","Wt"};
int n=3;
sort(name,n);
print(name,n);

}


void sort(char* name[],int n)
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(int j=i+1;j<n;j++)
{
if(strcmp(name[k],name[j])>0)
k=j;
}
  if(k!=i)
  {
temp=name[k];name[k]=name[i];name[i]=temp;
  }

}


}
 void print(char* name[],int n)
 {
for(int i=0;i<n;i++)
{
cout<<name[i];

}
 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值