专栏首页石头岛一级指针简单理解

一级指针简单理解

两个关键符号:

& : 取内存地址符 * : 取内存值符

指针的操作规律:

1.声明的时候是往里放地址 int *p = &num,
2.直接拿的时候就是直接操作地址内的值 *p = 10;

在 C 中操作地址就可以操作值,就跟 java 中两个引用类型拿到引用可以操作内一个对象一样。

变量名    内存地址	   值
a        [0x23fa32]	100
*p       [0x24aa34]	[0x23fa32]

指针存放的是 a 的内存地址,&p则是自己的内存地址 [0x24aa34]

1.创建一个针指并使用

void main() {
	int num = 100;
	int *p = #		//将内存地址给 *p
	printf("%x, %x",&num, &p);
	*p = 10;
	printf("%d", num);	//10
}

分析过程: 根据拿到的直址 分别查看 &num,和 &p。&num 的地址以 带符号 4字节查看是100。 查看&p 的地址,以十六进制查看,因为存的是 &num 的地址。并不是实际的值。这就证明了指针变量存的是地址。 当程序再往下走 *p = 10 时,再回头看 &num 的值,已经变红,修改成了10。

2.传递指针

void main() {
	int num = 100;
	change(&num);	//形参是指针类型,就可以将地址传递过去。
}

void change(int *p) {		//创建一个指针用来接收地址
	*p = 20;
}

需要注意的是C当中的方法形参使用的是变量副本机制,也就是说,方法形参也是有个自己的内存地址。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分代的概念

    不分代完全可以,但是分代的唯一理由是为了优化GC性能。 怎么优化? 如果不进行分代,每次GC都要把整片堆扫一遍来寻找垃圾对象,太慢。分代直接把对象创建到某一个分...

    潇洒
  • 如何停止一个线程

    线程当中一般都会写循环,如果不写循环,一句话能搞定的事,就没必要再开线程来处理。 stop方法已经过时, run方法结束。 开启多线程时,运行代码通常是循环结构...

    潇洒
  • 引用级别

    即一般普通的引用。 如果一个对象是强引用,绝对不会被回收,即使内存空间不足也不会被回收,而是抛 OutOfMemoryError 异常使程序终止。 例1:

    潇洒
  • leetcode-258-Add Digits

    chenjx85
  • 2019二级C题库及解析(7)

    此题为if...else...语句的嵌套,第二if...else...作为第一个if...else...语句else部分的复合语句。

    用户6755376
  • 【leetcode刷题】T193-各位相加

    https://leetcode-cn.com/problems/add-digits/

    木又AI帮
  • LeetCode 258. 各位相加

    Michael阿明
  • 11.python并发入门 part3

    锁,通常被用来实现共享数据的访问,为每一个共享的数据,创建一个Lock对象(一把锁),当需要访问这个共享的资源时,可以调用acquire方法来获取一个锁的对象,...

    py3study
  • 【Go 语言社区】Golang语言的多核并行化例子

    写了个多核跑程序的例子,从《go语言编程而来》。关键就是runtime.NumCPU()读出cpu核数,runtime.GOMAXPROCS(MULTICORE...

    李海彬
  • go语言的多核并行化例子

    写了个多核跑程序的例子,从《go语言编程而来》。关键就是runtime.NumCPU()读出cpu核数,runtime.GOMAXPROCS(MULTICORE...

    李海彬

扫码关注云+社区

领取腾讯云代金券