C语言中的指针和数组几乎可以互换,数组名可认为是一个常量指针,指针可用来完成涉及数组下标的操作。
e.g.int * nPtr;
int Array[size];
(1)数组与指针等价
nPtr = Array;或者nPtr = &Array[0];
(2)引用数组元素Array[3]
nPtr[3]或者*(nPtr+3)或者*(Array+3)
其中,nPtr[3]为指针下标表示法。
(3)e.g.数组拷贝
//用数组表示法把s2拷贝到s1中
void copy1(char *s1,constchar *s2)
{
int i
for(i=0;s1[i]=s2[i];i++);
}
//用指针表示法把s2拷贝到s1中
void copy1(char *s1,constchar *s2)
{
for(;* s1=* s2;s1++,s2++);
}
(4)指针数组
char * suit[4]={"zhonghua","renmin","gonghe","guojia"};
//char * 表示suit数组的每一个元素都是指向char类型的指针,即suit数组中存储的是4个指针。
//等价于 char suit[4][9]={"zhonghua","renmin","gonghe","guojia"};
//二维数组必须设置相同的列数,因此指针数组更具有灵活性。
(5)数组指针
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4];
p=a;
*(*(p+i)+j);//表示a[i][j]的值
void search(float (*p)[4],int n);//多维数组的指针作为函数参数
search(a,2);//函数调用
(6)指向指针的指针
e.g. main()
{
char *name[]={"Beijing","Chongqing","Shanghai","Tianjin","Shijiazhuang"};
char **p;
int i;
for(i=0;i<5;i++)
{ p=name+i;
printf("%s\n",*p);//如果是**p,表示一个字符。
}
}
举例:洗牌和发牌程序
#include
#include
#include
void shuffle(int [][13]);//为什么参数中数组的第二个下标必须有
void deal(const int [][13],const char * [],const char * []);
main()
{
int deck[4][13]={0};
constchar * face[4]={"Hearts","Diamonds","Clubs","Spades"};//指针数组
constchar * suit[13]={"one","two","three","four","five","six","seven",
"eight","nine","ten","eleven","twelve","theteen"};
srand(time(NULL));
shuffle(deck);
deal(deck,face,suit);* face[4]和* suit[13]数组必须定义成const,否则在此出现错误,
//错误类型:不能把“* char[]”转换成“const * char[]”
return 0;
}
void shuffle(int wDeck[][13])
{
int row,col,i;
for(i=1;i<53;i++)
{
row=rand()%4;
col=rand()%13;
while(wDeck[row][col]!=0)
{
row=rand()%4;
col=rand()%13;
}
wDeck[row][col]=i;
}
}
void deal(const int wDeck[][13],const char * wFace[],const char * wSuit[])
{
int i,row,col;
for(i=1;i<53;i++)
for(row=0;row<4;row++)
for(col=0;col<13;col++)
{
if(wDeck[row][col]==i)
printf("%5s of %-8s%c",wFace[row],wSuit[col],i%2==0?'\n':'\t');
}
}
上一篇:I2C总线的工作原理与在51单片机中的应用
下一篇:C51中断应用interrupt 和 using
推荐阅读
史海拾趣
- 格创东智SEMICON CHINA 2026圆满收官,章鱼智脑与全场景智能体群定义工业智能决策新高度
- 当变压器进入封装:TI IsoShield如何改写隔离电源边界
- 2026年1月座舱域控迎新一轮洗牌,华为、小米上位,比亚迪电子承压
- SK Signet推出400kW一体式超快速电动汽车充电器
- 智元机器人第1万台人形机器人A3量产下线,全球市场份额领先
- 雷诺和RMC BFM推出人工智能个性化车载收音机
- Diodes推出符合汽车级标准的100V PowerDI®8080-5封装MOSFET
- 保时捷申请线控换挡系统专利 兼具自动变速箱和手动变速箱功能
- 汽车以太网的11大误区
- 如何将自动驾驶大模型庞大的能力压缩到车端?



LT1578IS8






京公网安备 11010802033920号