指针的使用方法【三】


上一篇文章地址:http://blog.csdn.net/qmhlan/article/details/6640481(指针系列)


下面介绍指针与数组的关系

指向一维数组的指针

指向多维数组的指针

指向字符串的指针


1.指向数组元素的指针变量的定义方式:类型   *指针变量名

例如:int * p;

2.数组名的含义:数组名代表数组的首地址。

3.指向数组元素的指针变量的赋值:指针变量 = 数组某一元素的地址(通常是首地址)

例如:  int  a[10],*p;

p=a;或 p = &a[0];

图示:

指向数组的指针的加减运算

p++;//p指针移动p所指向类型的字节,p所指向的是int型数组,所以p移动两个字节指向a[1]

引用一个数组有两种方法:

1.下标法:如a[i]

2.指针法:如*(a+i)或*(p+i)

若有数组及指针定义   int  a[5] ,*p = a;

下标法:a[0]   a[1]   a[2]   a[3]   a[4]

指针法:*p      *(p+1)  *(p+2)  *(p+3)   *(p+4)

             p[0]  p[1]     p[2] p [3]  p[4] 

             *a    *(a+1)  *(a+2) *(a+ 3)  * (a+4)

通过数组名计算数组元素的地址,找出元素的值

main()

{

int a[10];int i;

for (i = 0;i<10;i++) 

scanf("%d",&a[i]);

printf("\n");

for(i = 0 ;i<10;i++)

printf("%d",*(a+i));

}

用指针变量指向数组元素:

main()

{

int a[10];

int *p,i;

for(i = 0 ;i<10;i++)

scanf("%d",p++);

printf("\n");

for(p = a;p<(a+10);p++)

printf("%d",*p);

}

注:p++合法,但a++不合法(a是数组名,代表数组首地址,是常数地址)

       要注意指针变量的当前值


p++;(或p+=1;)

p将指向下一个元素,即a[1].


x = *p++;//不建议使用

*与++是同级运算,等价于先计算*p,为x赋值a[0],再++


*(p++)与*(++p)

*(p++)是先取*p的值,后使p+1;

*(++p)是先使p加1,后取*p的值


(*p)++;

表示p所指向的元素值加1(即a[0]++),而不是指针值加1.

Example:

main()

{

int a[3],*p =a;

a[0] = 10; a[1] = 20;a[2] = 30;

printf("%d/t",*p++);

printf("%d\n",*++p);

}

输出结果:10        30

main()

{

int a[]  = {1,2,3,4,5};

int *p = a+3;

printf("%d,%d,%d\n",*p,*(p+1),*p+3);

}

结果:4,5,7

多维数组的指针

1.定义引用形式与指向一维数组的指针类似

例如:int  a[3][4],*p

p=&a[2][3];

2.行列地址表示

若有定义:int a[3][4];

下图表格中的数字表示每个元素的地址值。

指针与字符串

1.字符串的表示形式

用字符数组实现:char  string[] = " I Love China!";

用字符指针实现:字符指针变量的定义 :char   *p;

赋值:指针=串中某一字符地址

char *s = "I Love China!" ;//初始化s

字符串都以/0为结束标示符,所以实际长度为字符串长度+1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值