c语言指针与数组的一些小总结

c语言指针与数组的一些小总结

  1. 在c语言中,数组名(不包括形参数组名)代表数组中首元素的地址
#include"stdio.h"
int main()
{
	int *b,a[10]={1,2};    //定义一个指向int的指针b。 
	    b=a;      // 把a[0]的地址赋值给指针变量b。相当于b=&a[0];
		printf("%d",*b);  //输出为a[0]的值1。 
		  
}
  1. 在一定条件下指针可进行加减运算。
#include"stdio.h"
int main()
{
	int *b,a[10]={0,1,2,3,4,5,6,7,8,9};
	b=&a[5];        //将a[5]的地址赋给指针变量b
	printf("%d\n",*(b+1));   //*(b+1)即a[6]的值。
	printf("%d\n",*(b-3));   // *(b-3)相当于a[2] 
}

3.用指针变量指向元素数组

#include"stdio.h"
int main()
{
	int *b,a[10];
	for(b=a;b<a+10;b++)    //开始时把a[0]的地址赋给指针变量b。
	   scanf("%d",b);
	for(b=a;b<a+10;b++)   //这里必须重新赋&a[0]给b,否则b为a[9]的地址。
	   printf("%d\t",*b);      
 } 
#include"stdio.h"
int main()
{
	int *b,a[10],i;
	fAor(i=0;i<10;i++)
	   scanf("%d",a+i);
	for(i=0;i<10;i++)
	   printf("%d\t",*(a+i));    //*(a+i) 相当于a[i] 
}

以 *b 输出的速度高于比 *(a+i) 或 a[i]。


注意:以如下方式进行for循环是错误的

for(b=a;a<b+10;a++) //这一行报错
   printf("%d",*a);

a是一个指针型常量。它的值在程序运行期间是固定不变的。

4.当指针变量指向数组元素时指针变量可以带下标。

#include"stdio.h"
int main()
{
	int *b,i,a[10]={0,1,2,3,4,5,6,7,8,9};
	b=a;  //把a[0]的地址赋给指针变量b,这是b[i]==a[i]的前提。
	for(i=0;i<10;i++)
	printf("%d\t",b[i]); //输出a[i]的值。
	/*  此时有  b[i]==a[i]==*(b+i)==*(a+i)   */ 
}

5.指针运算易混淆的几个表达式
首先需明白
++ 和 * 是同优先级,方向是从右往左读。

#include"stdio.h"
int main()
{
	int *b,a[10]={0,1,2,3,4,5,6,7,8,9};
	b=a+3;           //把a[3]的地址赋给指针变量b。
	
	 
	printf("%d",*b++);   //指针变量b先进行“* ”运算,再让指针变量加 1。
    //  即输出 a[3] 的值 3 。然后让b加 1。
	
	printf("%d",*++b);  //指针变量此时为&a[4] 先让指针变量加 1 为 a[5] 的地址 ,再做“* ”运算。
	// 即 a[5]的值  5 
	
	printf("%d",++*b); //次时b为a[5]的地址,先做“* ”运算再让元素值加 1。
	// 即 a[5]+1的值 6.
	
	           	 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值