C语言的一级指针和二级指针理解心得

一、什么是C语言指针?    

        指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。

        我们在学习C的时候应该会听到这样的一句话,不学指针等于白学C,指针是C的灵魂。指针其实是一个整形变量,与其它数据不同的是,它的作用是用来存储其它变量的地址。指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。

二、如何理解C语言的指针?

        指针的概念定义太过抽象,初学者不太容易理解。如何形象地理解C指针?我觉得可以把存储单元看成一个个有编号的小仓库,每个仓库内都装有物品,那么每个仓库表面的编号就可以看为指针,仓库内的东西就可以理解为存储单元内的数据。因此,我们可以根据仓库的编号顺利找到我们想要的物品,可以理解为指针不是实际的存储单元,它是存储单元的编号,根据这个指针我们可以查到它指向的存储单元内数据。

三、一级指针和二级制指针

        我们先来了解下一级指针,比如下面例子,b为指针变量,b存放的是a的地址,*b等于a的值,但是既然b存放的是a的地址,那么就有实际的空间,这个空间也就有地址。正如打印的结果,a的地址等于b的值(0019FF2C),b的地址却是 0019FF28,这个地址空间存放的值就是a的地址。通过改变指针*b的值我们就可以

#include <stdio.h>
#include <string.h>


int main(void)

{
	int a = 100;
	int *b = &a;

	printf("a的值为:   %d \n", a);
	printf("a的地址为: %p \n", &a);
	printf("*b的值为:  %d \n", *b);
	printf("b的值为:   %p \n", b);
	printf("b的地址为: %p \n", &b);

    return 0;
}


运行:

a的值为:   100
a的地址为: 0019FF2C
*b的值为:  100
b的值为:   0019FF2C
b的地址为: 0019FF28
Press any key to continue

    二级指针就是为了获取这个地址,一级指针所关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途,但二级指针所关联的数据只有一个类型一个用途,就是地址,指针就是两个用途提供目标的读取或改写, 那么二级指针就是为了提供对于内存地址的读取或改写,我们可以看到fun1函数并没有改变b指针存放的地址,而fun2改变了b的指向("this is fun2"),因为fun1函数的形参传入实际上是复制实参b的地址给temp,就像int a =1;b = a; b = 2;此时b为2,但是a还是1,道理是差不多的,我们改变的是temp的指向,temp本质上是一个变量,存放的是b指向的地址,因此想要改变一级指针b就要引入二级指针,fun2函数的形参temp存放的是b的地址,*temp即为引用b,改变*temp即改变b的指向。

#include <stdio.h>
#include <string.h>

void fun1(char *temp)
{
	temp = "this is fun1";
}
void fun2(char **temp)
{

	*temp = "this is fun2";
}
int main(void)

{
	char a[20] = "hello";
	char *b = a;
	printf("b为: %s \n", b);
	fun1(b);
	printf("b(fun1)为 %s \n", b);
	fun2(&b);
	printf("b(fun2)为 %s \n", b);

    return 0;
}

运行:

b为: hello
b(fun1)为 hello
b(fun2)为 this is fun2
Press any key to continue

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值