C指针小结1

我认为C语言的核心就是指针和对内存的操作,而操作内存就是由指针实现的,所以说指针真的非常非常重要,在后边的数据结构的学习中更要用指针,如果你立志要走C系统的开发这条路,那么你就应当精通指针的各种应用。下面写一点博主在学习指针时的一点小心得,小体会(仅仅一家之言)。

在刚学习指针时是真的一头雾水,感觉好难理解啊,这到底是个什么鬼?为何如此之难?不过在经过很长时间的纠结后博主还是有所体会。

指针:

指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points
to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。

运算符* 和& ,“*”的意思是取出这个地址存储的内容,“&”的意思是取出存储这个值的地址(取地址符)

例如:

int *a;

这个a就是一个指针,此时a存储的是一个地址。

指针的初始化:

既然指针是一个地址,那么初始化时就应当赋给指针一个地址作为初始值。

int *a;

int b=5;

a=&b;

此时a的值为一个地址(这个地址是随机分配的),

此时b的值为一个int型的常量5,此时*a的值正是5;

现在就两个表达式进一步说明指针:

int  c=4;

int *p=&c;

上边声明了一个int型常量c和一个指向int型的指针p。

现在讨论赋值问题:

地址(&c),(&p),(++p),(p++)都是不能当作左值来赋值的。

地址中包含的内容(常量)(++*p),(*p)++,++*++p,也不能当作左值来赋值。

指针同样可以进行算术运算,对它加上N,就等于它向后移动N个元素,当指针进行减法运算或者比较运算时(这两个或多个指针都要指向同一个数组中的元素);

使用指针时应当注意的地方:

1.错误地对一个未初始化的指针变量进行解引用。

2.错误地对一个NULL指针进行解引用。

3.向函数错误地传递了一个NULL指针。

4.未检测到指针表达式的错误,从而引起错误。

5.对一个指针进行减法运算,使它非法地指向了数组的第一个元素的前面的位置。

6.小心使用++P和--P这类表达式,极有可能越界导致严重后果。

时间: 2024-11-05 09:48:14

C指针小结1的相关文章

黑马程序员学习笔记-C指针小结

黑马程序员学习笔记-C指针 1. 指针简介: 指针是C语言中非常重要的数据类型,是C语言的精华 2. 指针变量定义: 格式:类名标识符 *指针变量名; 指针变量只能存储地址 指针就一个作用:能够根据一个地址值,访问对应的存储空间 指针变量p前面的int:指针变量只能指向int类型的数据 3.实例: 4. 注意点: 指针变量只能存储地址.指针变量未经初始化,不要拿来间接访问其他存储空间.指针变量的初始化可以int *p = &a;也可以拆分成两句:int *p; p =&a;.定义变量时的*

C指针小结2

在上一篇对指针的小结中只是片面的说明了指针的概况,与基本含义,其实说到指针必然要提及数组,数组与指针有着密不可分的联系.但是切记数组和指针根本是两个东西,指针不能和数组画等号. 数组: 例如 int a[10];这声明的是一个由10个整形组成的数组,其中包含10个整形元素,同时数组名的值是一个指针常量,也就是数组第一个元素的地址.如果前面声明的是其他类型那么,数组名的类型就是"指向其他类型的常量指针".之前说过数组与指针不是一个东西,那么他们的区别在哪里? 1.数组具有确定数量的元素,

指针小结

1.指针与左值.右值 在C++中有左值与右值之分,弄清楚它们的关系和区别很重要.当一个对象用作左值时用的是对象的身份(即其内存),当一个对象用作右值时用的是对象的值(即内容). 例如: int a = 5,b = 6; a=b;   //a是左值,用的是a在内存中的位置 //b是右值,用的是b的值,即6 取地址符作用于一个对象时取这个对象的地址,返回一个指向此对象的指针.所以取地址符作用一个左值对象,返回值是指针,而指针是一个右值.解引用运算符求值结果是左值. 例如: int *p: p的类型为

C指针小结

在C语言的学习中,指针,数组,函数等被我们所熟知,但是真正碰到或者真正用到时,难免有些混淆.下面重点聊一下指针: 指针:通俗讲是内存单元的地址,是个常量.换句话说是地址. 指针变量:在C语言中允许一个变量来存放指针,这个变量就是指针变量.是个变量.换句话说是取值为地址的变量.(但是在平时大家统称指针变量为指针,这个要分清) 指针变量的类型说明: 类型说明符* 变量名:初始化的两种方法:int* p = &a或者int* p;p = &a;( 指针定义时要初始化,这是一个好习惯) 指针变量的

C++的RAII和智能指针小结

RAII:资源分配即初始化,利用构造函数和析构函数定义一个类来完成对资源的分配和释放 智能指针主要用来防止内存泄漏,我们来举个栗子,看看为什么会有智能指针这个东东 例1: 对于上面这段程序,由于抛出异常的时候影响了代码的执行流,所以要在异常捕获之前将p提前释放(详见 我的博客:C++的异常浅析),虽然可以通过再次抛出以异常解决这个问题,但是在代码美观方面不够完 美,更重要的是如果在代码量非常大,而且在多处有动态开辟出来的空间的时候,仅仅通过再次抛出异常已 经远远不够解决这个问题了,会使得工作量大

学习点滴记录之三指针小结

1.简单来的说,指针也是一种变量,占有内存空间,并且指向内存地址. 2.声明时,*表示声明的变量为指针:操作时,*表示对指针指向内存空间的值进行操作. *p相当于通过地址(p变量的值)找到内存,并对该内存进行操作. *p放在“=”左边,表示对内存进行赋值运算:放在右边,则是读取该内存中的值. 3.指针变量和它指向的内存块是两个不同的概念 //含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容:p = p +1; //p++ //含义2 给*p赋值*p='a'; 不会改变指

C指针小结3

现在总结指针的更高一级的用法,其中指向函数的指针在我的博文中已经单独介绍过了,将会补充介绍几点,现在介绍别的指针的用法. 首先介绍几个陷阱: int f()[]; int f[](); 这两个声明都是非法的,如果有人问这两个声明什么意思,我们应当不加思索的说出这是错误地声明,博主就曾经苦苦思考过这两个声明的意思,现在想想都觉得可笑. 现在对于指向函数的指针补充几点: 例如: int (*pf)(int)=&f; 现在创建了一个函数指针,并把它初始化为指向函数f,其实初始化表达式的&操作符是

C和指针小结

C和指针 相关基础知识:内存的分配(谭浩强版) 1.整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2.int *p,指向整型数据的指针变量. 3.通过指针变量访问整型变量. 4.*p :指针变量p指向的存储单元(变量) 5.p = &a——>> *p = *&a 6.用指针作函数参数 7.调用函数中,由于虚实结合是采用单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参. 8.引用一个数组元素可以用(1)下标法(2)指针

指针和数组(上)

1)指针基础: 既然程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间, int main() { int i=5; int *p=&i; printf("%d,%08x\n",i,p); *p=10; printf("%d,%08x\n",i,p); return 0; } 指针本质: 指针在本质上也是一变量, 指针需要要占用一定的内存空间, 指针用于保存内存地址的值, *号的意义: 在指针声明时,*号表示所声明的变量为指针