我是靠谱客的博主 欣慰早晨,最近开发中收集的这篇文章主要介绍更好地理解C语言指针(1),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、定义
int a;//定义一个整型变量a,为int类型。
int *p;//定义一个整型指针变量p,为int* 类型。

ap都是能存储数据的变量,
只不过a存的是-1,0,1,2,3这种类型的整型数据,
p可以存储的是 0x000001 , 4216521532 这种地址数据,这些地址数据是其他变量的地址值。( 因为没有赋值,现在还没有值或是随机值 )

每一个你定义的变量在内存中是有地址的,地址可以用一串数据表示,指针就可以存储这些数据(用普通变量存储也行,但无意义)

二、赋值
p=&a;

众所周知,&a是取a的地址,所以把这个地址赋值给p,现在p存储的是0x000001,4216521532这种地址,在我电脑上p存的数据为6422036。

如下面程序所示,单独打印p,就可以显示p中所存储a地址数据

int *p;
int a;
a = 1;
p = &a;
printf("%d", p);// 6422036
三、*p

对于加了 *号的p就不一样了,*p 表示p存的地址数据对应的这个变量,即6422036地址上的变量,那么是哪个变量的地址是6433036呢,显然是a,所以*p 就是a。

int *p;
int a;
a = 1;
p = &a;
printf("p=%dn", p);
printf("*p=%dn", *p);
/*
p=6422036
*p=1
*/
四、指针为什么强大

对于直接存取变量地址,接近底层,加快了程序的速度
数组,函数,结构体等数据类型不能直接当作函数的参数传递,极大地限制了我们的发挥,但你可以把这些变量的地址传进去,然后用指针操作它们,简单灵活,岂不美哉?
比如:传数组
int16 fun1(int *dat, int *a, int *dat2)//传三个地址进来,赋值给指针变量
假设c[3]={0,0,0},d[3]={1,1,1};
可以用如下方法调用函数:
fun1(c,&a,d)// 数组名称即代表数组首地址,a是上述说的一个int变量

五、最后

有什么疑惑欢迎留言,互相学习并在之后的文章补充。

最后

以上就是欣慰早晨为你收集整理的更好地理解C语言指针(1)的全部内容,希望文章能够帮你解决更好地理解C语言指针(1)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部