zhizunbao84 / mygitblog

People Die, but Long Live GitHub
MIT License
0 stars 0 forks source link

c语言指针 #10

Open zhizunbao84 opened 2 years ago

zhizunbao84 commented 2 years ago

int *ptr = NULLint *ptr = 0都是表示初始化指针为空指针。

int *p = &aCPU 读写数据必须要知道数据在内存中的地址,普通变量和指针变量都是地址的助记符,虽然通过 p 和 a 获取到的数据一样,但它们的运行过程稍有不同:a 只需要一次运算就能够取得数据,而 p 要经过两次运算,多了一层“间接”。也就是说,使用指针是间接获取数据,使用变量名是直接获取数据,前者比后者的代价要高。

关于 * 和 & 的谜题

假设有一个 int 类型的变量 a,pa 是指向它的指针,那么&a和&pa分别是什么意思呢? &a可以理解为(&a),&a表示取变量 a 的地址(等价于 pa),(&a)表示取这个地址上的数据(等价于 pa),绕来绕去,又回到了原点,&a仍然等价于 a。 &pa可以理解为&(pa),pa表示取得 pa 指向的数据(等价于 a),&(pa)表示数据的地址(等价于 &a),所以&pa等价于 pa。

对星号*的总结

在我们目前所学到的语法中,星号*主要有三种用途: