指针与数组

一、通过指针的方式打印数据

#include <stdio.h>
#include <stdlib.h>

int main()
{

	int   *p;//整型的指针只能指向整型的地址
    char   *p2;//字符型的指针只能指向字符型的地址
    
    int   a=10;
    char  c='A';
    
    p=&a;
    p2=&c;
    
    printf("a=%d\n",*p);
    printf("c=%c\n",*p2);
    
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
二、探讨指针++的问题
(1)打印地址

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int   *p;//整型的指针只能指向整型的地址
    char   *p2;//字符型的指针只能指向字符型的地址
    
    int   a=10;
    char  c='A';
    
    p=&a;
    p2=&c;

    printf("a的地址打印: %p\n",p);
    printf("c的地址打印: %p\n",p2);
    
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
(2)当指针++的时候,打印地址

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int   *p;//整型的指针只能指向整型的地址
    char   *p2;//字符型的指针只能指向字符型的地址
    
    int   a=10;
    char  c='A';
    
    p=&a;
    p2=&c;
        
    printf("a的整型地址打印: %p\n",p);
    printf("a的整型地址++打印: %p\n",++p);
    //先把地址往后移再打印
    
    printf("c的字符型地址打印: %p\n",p2);
    printf("c的字符型地址++打印: %p\n",++p2);
    //先把地址往后移再打印
	
    system("pause");
	return 0;
}

运行结果
在这里插入图片描述
整型的地址在++的时候移动了4个字节
字符型的地址在++的时候移动了1个字节
(地址是连续的)

(3)通过数组打印地址

#include <stdio.h>
#include <stdlib.h>
int main()
{

    int   array[3]={1,2,3};
    printf("第一个元素的地址%p\n",&array[0]);
    printf("第二个元素的地址%p\n",&array[1]);
    printf("第三个元素的地址%p\n",&array[2]);
    
    system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
通过运行结果显示,整型数组的偏移值为4。

(4)通过指针访问数组(通过指针偏移的方式,访问数组)

#include <stdio.h>
#include <stdlib.h>
int main()
{

     int   array[3]={1,2,3};
     int  *parray;//定义指针*parray
     
     parray=&array[0];//指针等于数组元素的首地址
 
    printf("第一个元素的地址%p\n",parray++);
    printf("第二个元素的地址%p\n",parray++);
    printf("第三个元素的地址%p\n",parray++);
    //最后一个指针可以++,也可以直接写parray
    
    //通过指针++(指针偏移)的方式来访问数组。
    
    system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

(5)通过指针的方式,来访问数组

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int   array[3]={1,2,3};
     
    int  *parray;
    
    parray=&array[0];
    /*指针指向数组元素的首地址,对数组进行偏移*/
    
    int  i;

     for(i=0;i<3;i++)
    {
          printf(" %d ",*parray);
          parray++; 
    }
    
    system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

注:
指针访问数组的另一个写法

#include <stdio.h>
#include <stdlib.h>
int main()
{
  int   array[3]={1,2,3};
  int  *parray;

  parray=&array[0];//指针指向数组元素的首地址
  
  int  i;
 
    for(i=0;i<3;i++)
{
    printf(" %d ",parray[i]);//遍历数组
}
    
    system("pause");
	return 0;
}
  

运行结果:
在这里插入图片描述

指针与数组知识点:
1.数组关心的是数组的首地址

2.首地址的两个表现方式:
(1)数组名=数组的首地址 (2)第一个元素的地址

3.指针是分类型的

4.指针++根据类型不同,偏移值也不同

5.指针和数组

(1)数组的首地址如何表示:
数组名,第一个元素的地址
int array[10];int *p; p=array;指针指向数组名
int array[10];int *p;p=&array[0];指针指向数组元素的首地址
(2)注意
指针偏移的位置,不要超出数组,否则会看到乱码。

——@上官可编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值