C语言指针理解(刚开始学的初学者建议观看)

指针的定义还有一系列什么的我都不多说啦。老生常谈,就是因为看不懂才来看的。接下来我直接用几个实例来为你们解释什么是指针。

*****************************************正文开始*********************************************

定义指针(标准形式):

标准的定义一个指针的形式如下:

#include<stdio.h>
int main()
{
	int a = 9, *p;
	p = &a;
	*p = a;
	printf("p=%p\n*p=%d", p, *p);
}

结果如下:

 因此我们得到 结论 (p和*p的区别):

int *p,相当于 定义 了一个 指针变量 。定义之后,p就是一个 指针变量(也可以理解为一个地址变量)。而 *p 则是通过 地址变量(p) 中 存储的地址 去 间接的 访问到这个地址中的值(可以理解为*p里面存储了一个值(严格意义上说不是,但你先这个理解))。

*****************************************分割线*********************************************

定义一个swap()函数用于交换两个数的值

#include<stdio.h>

void swap(int* a, int* b)
{
	int t;
	t = *a;
	*a = *b;
	*b = t;
}

int main()
{
	int a = 2, b = 9;
	swap(&a, &b);
	printf("调用swap()后\na=%d\nb=%d", a, b);
	
}

利用 结论 的知识也就是为什么你定义一个void swap(int *a,int *b)函数用于交换两个参数的值的时候,往里边传入实参的方式是swap(&a,&b)。运行结果是正确的(a变为了9,b变为了2),我就不给你们看了。

*****************************************分割线*********************************************

接下来给你们讲一个小知识点。我们都知道,数组名本身其实就是一个地址,里面存放的地址是与第一个元素的地址是相同的。验证如下

#include<stdio.h>
int main()
{
	int arr[10] = {1,2,3,4,5,6};
	int * p1, * p2;
	p1 = arr;
	p2 = &arr[0];
	printf("p1=%p\np2=%p", p1, p2);
}

运行结果如下:

 得证;

拓展,为什么这样呢,为什么要让数组名本身就是一个地址呢?因为在c语言中。来取数组中的值就是这么操作的。我们知道数组中的元素之间的地址是紧挨着的。因此如果要去取一个数组中位于第二个位置的元素,C语言的计算方法就是,,要取的元素的地址 = 数组名起始地址+根据指针类型而定的字节数*元素的下标(或称为索引),从而确定的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值