C的学习5(指针)

指针是C语言的核心,数据结构需要有指针的基础。

内存编号 = 内存单元的地址 = 指针存放的变量

通俗而言就是,普通变量存放的是值;指针存放的是内存编号。通过指针可以对内存进行灵活的操作

指针不是地址而是用来存放地址的,申请的何种指针类型也只能存放何种类型变量的地址,而不能存放变量的值。

     p = i; //erro,不能存放变量
        p = &i; p保存了i的地址,在计算机组成原理中,申请的变量存放在内存条的内存中,内存条可以想想成一个柜子,指针就是写有变量柜号的纸条。 
        p与i互不相等,互不影响。无论哪个的值进行了修改都不会对另外一方产生影响
        p存放地址变量,i存放数值变量
        如果一个指针变量指向了某个普通变量,则   *指针变量  就完全等价于等同于  普通变量 
    例子:
        如果p是个指针变量,并且p存放了普通变量i的地址
        则p指向了普通变量
        *p 就完全等同于 普通变量     
        内存编号 = 内存单元的地址 = 指针存放的变量

#include <stdio.h>

int main()
{
	int number = 10;
	int *ptr = &number;
	printf("number的地址=%p\n",&number);	
	printf("number的数值=%d\n",number);
	printf("*ptr指向的数值=%d\n",*ptr);			//通过间接运算符计算的*ptr的数值为5 
	printf("ptr的数值=%p\n",ptr);
	printf("ptr的数值=%p\n",&ptr);			
   return 0;
}
/*
-------------------------------
number的地址=000000000062FE1C
number的数值=10
*ptr的数值=10
ptr的数值=000000000062FE1C
ptr的数值=000000000062FE10

--------------------------------
Process exited after 0.9378 seconds with return value 0
请按任意键继续. . .


*/

通过指针修改number的数值 

#include <stdio.h>

int main()
{
	int number = 10;
	int *ptr = &number;
	printf("number的数值为%d/n",number);
	*ptr = 15; 
	printf("number的数值为%d",number);//修改了指针指向的数值,number的数值也会发生改变
	//指针将不连续的数据链接在一起 


   return 0;
}

结构体指针

#include <stdio.h>
//链表节点的数据结构 
struct ListNode		//申明结构体 

{
	int val;//数据域 
	struct ListNode *Next;// 是链接下一个节点的指针	
};



int main()
{
	int val;	//val就是数据域 
	struct  ListNode a,b,c,d,e;
	a.val = 1;	//a的数值空间存放1	
	b.val = 2;
	c.val = 3;
	d.val = 4;
	e.val = 5;
	
	a.Next = &b;	//a的指针存储b的地址 
	b.Next = &c;	//b的指针存储c的地址 
	c.Next = &d;
	d.Next = &e;
	e.Next = NULL;	//最后一个节点的指针设置为空 
	
	printf("a存放的数值=%d,存放的地址=%p\n",a.val,a.Next); 
	
	
	struct ListNode	*head = &a; //将指针的head指向节点a 
	while(head)
{
	//通过循环打印链表中节点的数值、节点的地址和节点的next指针
	printf( " val = %d address = %p next = %p \n",head->val,head,head->Next); //循环打印链表中节点的数值、节点的地址和节点的next指针 
	head = head->Next ;
}
	
	//完成独立节点的创建、链接和遍历 
	
   return 0;
}

/*
在Dev-c++ 5.11的输出结果为:
-----------------------------------------------------------
a存放的数值=1,存放的地址=000000000062FDF0
 val = 1 address = 000000000062FE00 next = 000000000062FDF0
 val = 2 address = 000000000062FDF0 next = 000000000062FDE0
 val = 3 address = 000000000062FDE0 next = 000000000062FDD0
 val = 4 address = 000000000062FDD0 next = 000000000062FDC0
 val = 5 address = 000000000062FDC0 next = 0000000000000000

-----------------------------------------------------------
Process exited after 0.9275 seconds with return value 0
请按任意键继续. . .
 

*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值