指针与数组

数组:
  存储在一块连续的内存空间中
  数组名就是这块连续内存空间的首地址(数组名就是数组的首地址,也会数组首元素的地址)
  double score[] = {98,87,65,43,53}
  double*ptr_score;
  ptr_score=&score[0];    ptr_score = score;  这俩个是相等的

int i;
double score[] = {98,87,65,43,53};
double * ptr_score;
ptr_score = score;
for (i=0;i<5;i++)

 printf("%lf\n",*(ptr_score+i)); //第一次循环的时候  *ptr_score= 98然后i++  地址加一后 *ptr_score==87
}                                              //那么指针一次移动多长  sizeof(double)

使用指针访问数组元素
pritnf(“%lf\n”,prt_score[i]);pritnf(“%lf\n”,score[i]); //这两种方式是相同的
pritnf(“%lf\n”,*(ptr_score+i));// 建议使用这种方式
printf("%lf\n",*ptr_score++);       //不建议使用

可以把下面的代码放在编译器中自己研究一下深入了解指针与数组
    int array[]={15,20,23,25,36};
    int i;
    int *ptr_array;
    ptr_array = array;
    for (i=0;i<5;i++)
    {
        printf("第%d个元素的值%d\t是地址为:%p\n",i+1,ptr_array[i],&ptr_array[i]);
        printf("第%d个元素的值%d\t是地址为:%p\n",i+1,*(ptr_array+i),ptr_array+i);
        printf("第%d个元素的值%d\t是地址为:%p\n",i+1,*ptr_array,ptr_array);
        ptr_array++;    //移动指针
       
    }

数组逆序
    int array[N]={15,13,12,11,56};
    //实现数组的逆序-原理就是数组首尾元素进行交换   交换的时候第i个值和第N-i-1个值交换
    int temp;   //临时变量
    int i;
    //交换时也可以考虑用指针交换 
    for (i=0;i<N/2;i++)               
    {
            temp =array[i];
            array[i]=array[N-i-1];
            array[N-i-1] = temp;
    }
    for (i=0;i<N;i++)
    {
        printf("%d\n",*(array+i));
    }
 //交换时也可以考虑用指针交换
int *ptr_array_start =array;
int *ptr_array_end =array+N-1;  //N为元素的个数
  while (ptr_array_start!=ptr_array_end)
  {
      temp = *ptr_array_start;
      *ptr_array_start = *ptr_array_end;
      *ptr_array_end = temp;
      //首元素的地址向后移动
      ptr_array_start++;
      //末元素的地址向前移动
      ptr_array_end--;
  }
  for (i=0;i<N;i++)
    {
        printf("%d\n",*(array+i));
    }
数组与指针小结
1、int num[50];// num是数组名。也是数组的首地址,也是数组首元素的地址  num的值与&num[0]的值是相同的
2、数组第i+1个元素可表示为: 第i+1个元素的地址:&num[i+1]或num+i +1 第i+1个元素的值:num[i+1]或*(num+i+1)
   为指向数组的指针赋值:int * ptr_num = num;或int *ptr_num = &num[0]
   指针变量可以指向数组元素:int *ptr_num = &num[4];或int *ptr_num = num + 4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值