**
一、指针数组(比较常见)
**
2、指针数组定义:数组中每个元素都是一个指针(地址)
每个元素只能是地址,不能是普通数据
3、定义指针数组的语法:
数据类型 *数组名[数组长度/元素个数]={地址列表};
例如:
int a=10,b=20,c=30l
int *p[3]={&a,&b,&c};
结果:p[0]=&a;p[1]=&b;p[2]=&c;
等价:*(p+0)=&a;*(p+1)=&b;*(p+2)=&c;
取值:*p[0]=10; *p[1]=20; *p[2]=30;
等价于
**(p+0)=10; **(p+1)=20; **(p+2)=30
应用场合:将来如果要定义大量同类型的指针变量时,要想起采用指针
数组的形式简化代码
**
二、字符指针数组
**
定义:字符指针数组中每个元素是一个字符串的首地址
例如:
char *p[2] = {"abc", "efg"};
或者
char *p1 = "abc";
char *p2 = "efg";
char *p[2] = {p1, p2};
结果:
p[0] = p1 = "abc" = 第一个字符串的首地址
p[1] = p2 = "efg" = 第二个字符串的首地址
可复制代码如下:
可复制代码1:
#include<stdio.h>
int main()
{
int a=10,b=20,c=30;
int *p[3]={&a,&b,&c};
int length=sizeof(p)/sizeof(p[0]);//计算元素个数
for(int i=0;i<length;i++)
printf(" %d %d\n",*p[i],**(p+i));//2种打印方式
for(int i=0;i<length;i++)//扩大十倍
*p[i]*=10;
for(int i=0;i<length;i++)
printf(" %d %d\n",*p[i],**(p+i));//2种打印方式
}
可复制代码2
#include<stdio.h>
int main()
{
//1、形式1
char *p[]={"abc","efg"};
int len=sizeof(p)/sizeof(p[0]);
//读查看
for(int i=0;i<len;i++)
printf("%s %s\n",p[i],*(p+i));
//尝试将“abc”的 ‘b’->B,"efg"的'g'->'G'
// *(p[0]+1)='B';
// *(p[1]+2)='G';
//由于是字符串和指针的关系,所以是不允许修改的
//2、形式2
//要想修改需要使用数组形式
char *p1="mnl",*p2="xyz";
char *p3[]={p1,p2};
//读查看
for(int i=0;i<len;i++)
printf("%s %s\n",p3[i],*(p3+i));
//形式3:采用二维数组来实现字符串修改
char a[][4]={
{'a','b','c','\0'},{'x','y','z','\0'}};
//修改为b->B,z->Z
a[0][1]='B';
a[1][2]='Z';
for(int i=0;i<2;i++)
printf("%s\n",a[i]);
}
文章评论