C语言:指针与变量或数组的关系(详解)

  1. 首先先来说一下指针的概念

指针:简单地说就是地址(例如我们定义一个int a=10,在计算机内部会产生一个地址来存放这个变量a,在我们每一次使用这个变量a的时候,计算机就会找到这个地址并取出值,那么计算机是如何快速找到这个变量的呢。此时就引出了指针这个概念 其作用是用来指向这个变量)

   数组与指针的结合使用 与 变量与指针的结合使用不同

         这里需要理解:

  1. 当我们使用指针指向变量的时候,需要加&(取地址符)
  2. 当我们使用指针指向数组的时候,不需要加&(取地址符)

指针指向变量代码实例: 

#include<stdio.h>
int main() {
 	int a,*p=&a;
 	scanf("%d",p);
 	printf("输出指针赋值变量后的值%d",*p);
	return 0;
}

详解: 

  • 定义一个变量a,定义一个指针*p,使指针*p指向变量a的地址
  • 因为scanf函数本身需要的就是地址,指针*p指向的就是地址,所以我们可以直接写成p(其实就是&*p,&*同时存在时即可抵消)
  • 最后printf函数输出*p,*p指向的是变量a,也就是等价于printf("%d",a);

指针指向数组代码实例: 

#include<stdio.h>
int main() { 
    int a[5]={1,2,3,4,5},*p=a;
    ++p;
    printf("*(p+2)的值为:%d",*(p+2)); 
 return 0;
}

详解:  

  •  定义一个数组长度为5,*p指针指向这个数组的第一个元素a[0]
  • 指针的位置自增1,此时*p指针指向这个数组的第二个元素a[1](但对于指针来说,此时为p[0])
  • 最后printf函数输出*(p+2),*p(p[0])指向的是数组a[1],*(p+2)也就是指向数组a[3]

猜你喜欢

转载自blog.csdn.net/weixin_63987141/article/details/129292187