码迷,mamicode.com
首页 > 其他好文 > 详细

学习笔记:指针之C

时间:2014-10-29 22:23:50      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:指针   c语言   存储   内存   

因为某些原因来好好的将C重新梳理一遍,过去一年也是个渣,好在还能重新来过。将C和指针中指针一节学习了三四次,再将后面的习题做了一做。现在再好好回顾一下。至于对错就不过多评价。

指针的确是C的特点之一,从最初接这玩意就没把它弄的很明白。据说把它真正吃透的人也不多。这也只是我的学习笔记。指针,记得当初C语言老师说的一点,就是地址,其他就没啥印象了。自从自己做题就是记住了这点,指针就是地址,访问相应内存空间的值是间接访问,要用‘ * ’,也叫解引用指针。

通过C和指针这本参考书,我才知道我们是用变量来代替地址,也就是我们口中的变量。硬件依旧通过地址访问内存位置。相应内存空间存储的值得类型也并非值本身所固有的一种特性,而是取决于他的使用方式,这是隐式的决定方式。

在使用指针前,必须将其初始化,这是通过& 操作符完成的。不然就应该将其初始化为空指针即NULL。这样做的好处是防止指针未初始化会造成的未知错误。

另外需要注意一点,变量的值就是分配给该变量的内存位置所存储的数值,即使指针变量也不例外。例如

int a;//假设a 的地址为100
int *b;
a =120;
b =&a;
printf( "%d %d";a,b);
这样得到的值是120和100。这时我们也应该牢记指针变量的值就是一个数字,除非有间接访问操作符,否则我们是不能访问相应内存空间的值。

在解引用指针前,我们必须要确定相应的指针不是NULL指针,因为它是不能进行间接访问的。否则将会引发错误终止程序或者访问内存位置零,引发未知错误。

(检查参数的合法性)

指针常量其实蛮少用,除了极其特殊的情况(你能确定数据的内存位置)。此处应注意,假如知道指针变量确切位置即一整型数值,通过其间接访问操作话,应强制类型转化。如

*(int*)100 =5;
就是把值5存储于内存位置100。

指针的指针话,就应该先把一重指针搞明白后,多看看书,做做练习,对概念才更加深刻。

在学习时,遇到一些很常用的指针表达式。例如

char cp = 'a';
char *cp =&ch;
&ch;
cp;//右值 左值
&cp;
*cp;//<span style="font-family: Arial, Helvetica, sans-serif;">右值 左值</span>
*cp + 1;
*( cp +1 );//右值 左值
++cp;
cp++;
*++cp;//右值 左值
*cp++;//右值 左值
++*cp;
(*cp)++;
//++*++cp;
//++*cp++;
以上未标注的就只有为右值时合法。

不过正如书的作者所说 这并非让大家死记硬背,关键是让大家去理解这些表达式的意义。

坦白说我自己还是比较迷糊 不太理解这些表达式 不过忘了多翻翻参考手册 积累久了就好了。

另外对于指针的运算,指针和一个整数量执行算术运算时,指针的值根据合适的大小进行调整。即指针变化量等于整数量乘以数据类型所占字节大小(char 1 , short 2,  int 4,  double 8)。

只有指向同一个数组的指针才能进行减法运算。而其减法运算的结果与数据类型是没有什么关系的。减法运算的值是两个指针在内存的距离(以数组元素的长度为单位,而不是以字节为单位),因为减法运算的结果将除以数组元素类型的长度。例如p1指向array[i]而p2指向array[j],那么p1-p2的值就是 j - i 的值。

学习笔记:指针之C

标签:指针   c语言   存储   内存   

原文地址:http://blog.csdn.net/dawnfox/article/details/40589311

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!