用指针访问一维数组
数组中的所有元素都存储在连续内存中。数组名是数组第一个字节的内存地址,并且数组名a也表示指针.现在这个表达式可以转换成一个相当于p的指针!A作为正确的值并不意味着存储在地址A中的内容,而是数组第一个元素的第一个地址。
指针进行加法(减法)运算时,它前进(后退)的步长与它指向的数据类型有关。P指向的数据类型是int,占用内存4个字节,P 1表示前进4个字节。
用指针访问二维数组
首先看看常见指针变量的定义:
int a[2][3]={ { 2,3,6 },{ 4,5,8 } };
int(* p)[3]=a;//数组指针,指向一维数组的指针,
printf('a=%p a[0]=%pn ',a,a[0]);//400
printf(' *a=% p a[0]=% p a[0][0]=% pn ',* a,a[0],a[0][0]);//400一维数组第一个元素的第一个地址
//使用整个数组的数据没有实际意义,这种情况下编译器会将其转换为指向一维数组第0个元素的指针。
printf('(a 1)=%p a[1]=%pn ',a 1,a[1]);//412
printf(' *(a 1)=% p a[1]=% p a[1][0]=% pn ',*(a 1),a[1],a[1][0]);//
printf(' *(a 1) 2=% p a[1] 2=% p a[1][2]=% pn ',*(a 1)2,a[1]2,a[1][2]);//420
printf(' *(*a 1)=% d *(a[0] 1)=% d a[0][1]=% d ',*(* a 1),*(a[0]1),a[0][1]);//3
指针进行加法(减法)运算时,它前进(后退)的步长与它指向的数据类型有关
P的数据类型为int (*) [3],一维数组a[0]有3个整数数据,即12个字节,a 1=412。
[0]的数据类型是int *
一个小练习:打印出字符串指针数组中每一个字符
指针方法:字符串相当于一位数组。
# includestdio.h
int main()
{
char * array[5]={ 'array ',' 11 ',' kankanshisha ',' pointer ',' c program ' };
char *(p)=数组;//指向数组元素第一个地址的指针(字符指针类型)
for(int I=0;i5;(一)
{
for(int j=0;'' !=*(*(p I)j);j)
{
printf('%c ',*(*(p I)j));
}
printf(' n ');
}
返回0;
}
数组下标方法:
# includestdio.h
int main()
{
char * array[5]={ 'array ',' 11 ',' kankanshisha ',' pointer ',' c program ' };
char *(p)[5]=数组;//指向数组第一个地址的指针(* p)==数组名数组
for(int I=0;i5;(一)
{
for(int j=0;(*p)[i][j]!='';j)
{
printf('%c ',*(p)[I][j]);
}
printf(' n ');
}
返回0;
}