Cc 指针个人笔记

发布 2021-05-13 04:00:28 阅读 3692

指针,就是一个内存地址,地址总线是32位,就是2的32次方,所以32位电脑能管理4g的内存。那指针的大小就是4字节,一个字节是8位,所以是32位。如果是64位电脑 ,那指针就是64位,就是8字节,那是很大的一个数。

16gg.是多少。哈哈。

1. 指针的类型。

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部。

分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各。

个指针的类型:

1)int*ptr;//指针的类型是 int*

2)char*ptr;//指针的类型是 char*

3)int**ptr;//指针的类型是 int**

4)int(*ptr)[3];/指针的类型是 int(*)3]

5)int*(*ptr)[4];/指针的类型是 int*(*4]

2. 指针所指向的类型。

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了。

编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声。

明符*去掉,剩下的就是指针所指向的类型。例如:

1)int*ptr; /指针所指向的类型是int

2)char*ptr; /指针所指向的的类型是char

3)int**ptr; /指针所指向的的类型是int*

4)int(*ptr)[3]; 指针所指向的的类型是int()[3]

5)int*(*ptr)[4]; 指针所指向的的类型是int*()4]

指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你。

对 c 越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成。

指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。

我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了。

3. 指针的值或者叫指针所指向的内存区。

我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。

指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例。

一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向。

的内存区是不存在的,或者说是无意义的。

以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指。

的类型是什么?该指针指向了**?(重点注意)

4. 指针本身所占据的内存区。

在 32位平台里,指针本身占据了 4个字节的长度。

指针无论是什么类型,他都是4字节,在32位里,类型不同表示他读的内存大小不同。

比如char*那它一次读一个字节,在unicode里是两个字节,byte是一个字节。int四个字节。

double8个字节。。

当你++ 一次,他就要移动类型大小。。

在c++里,可以进行指针类型强制转换,这样做是十分危险的,,不提倡使用,如果使用一定要小心。因为如果你用char*去变成int*,那就会访问到不是你的内容。。可能出现不能意料的问题。

除非你知道内存的内容。。才能使用。

指针本身,也是一个变量。他是一个四字节的数,可以是long,也可以是int在32位里。

所以指针也有地址,,不是指针的指针 。

比如 char** p;表示一个指向char*的指针。。

指针本身是一个变量,你可以直接改变。

比如char* p;

p = 0x3423434;你可以直接给他值,但这样是危险的,,你要能控制他,你就要知道内存的内容。。

指针常量:指针是常量。指针本身不能变。

指针常量是指针所指向的位置不能改变,即指针本身是一个常量。但是指针常量可以通过间接引用修改内存中的数据。 定义指针常量的语句格式为:

指针类型 *const 指针常量名=&变量名。

常量指针:指针指向常量。指针可变。指向不能变。

const int* p = 5;//p可变,*p不可变。。

指针数组:指针数组是数组元素为指针的数组,其本质为数组。

int *ptr [10]。/每个元素是一个int*指针。。ptr++加的是4字节,这是一个数组。

int (*ptr)[10];/ptr指向的是一个int[10].ptr++,加的是40个字节,这是一个指针。

数组指针:数组指针是指向数组首元素的地址的指针,其本质为指针;

尽量不要写复杂的指针,,如果有复杂的指针,请用 typedef 定义。。

抽取法则:1, 抽出ptr得到指针类型。

2, 抽出*ptr得到指针指向的类型;

4)int(*ptr)[3]; 指针所指向的的类型是int()[3],指针类型是int(*)3];

5)int*(*ptr)[4]; 指针所指向的的类型是int*()4],指针类型是int*(*4];

左右法则:“右左法则“ 先右后左,遇到括号转头。再连起来读。有括号最括号里开始。变量开始。

比如:int* p[3]; p是一个数组首地址,不是指针。。

int (*s)[3]; 指向int ()3]

int* (p)[5]; 指向int*()5]

这是一个简单的法则,但能让你准确理解所有的声明。这个法则运用如下:从最内部的括号开始阅读声明,向右看,然后向左看。

当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都被分析完毕。

对上述“右左法则”做一个小小的修正:当你第一次开始阅读声明的时候,你必须从变量名开始,而不是从最内部的括号。

下面结合例子来演示一下“右左法则”的使用。

int * fp1) (int) )10];

阅读步骤:1. 从变量名开始fp1

2. 往右看,什么也没有,碰到了),因此往左看,碰到一个* -一个指针。

3. 跳出括号,碰到了(int一个带一个int参数的函数。

4. 向左看,发现一个函数)返回一个指针。

5. 跳出括号,向右看,碰到[10一个10元素的数组。

6. 向左看,发现一个指针。

7. 向左看,发现intint类型。

总结:fp1被声明成为一个函数的指针的指针的数组,这个数组有10个元素,函数的原型为带一个int类型的参数,返回值为一个指针?

指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减。

运算的意义是不一样的,以单元为单位。例如:

char a[20];

int*ptr=(int*)a; /强制类型转换并不会改变 a的类型。

ptr++;这里加加就加了四个字节,就到了a[4];

ptr = ptr+2;//这里就加了8个字节,两个int..

+ -是指向的内存单位,+1 -1也是一样。。+5-7也一样,是以指向的内存单位,而不是数值。

char *p;

char**ptr=&p;

ptr++;ptr本身是一个char**,他指向的是char*,所以加加,是加上四个字节,而不是一个字节。。

总结一下:一个指针 ptrold加(减)一个整数 n后,结果是一个新的指针ptrnew,ptrnew 的类型和 ptrold 的类型相同,ptrnew 所指向的类型和 ptrold

所指向的类型也相同。

ptrnew的值将比 ptrold 的值增加(减少)了 n乘。

sizeof(ptrold 所指向的类型)个字节。就是说,ptrnew 所指向的内存。

区将比 ptrold 所指向的内存区向高(低)地址方向移动了 n 乘。

sizeof(ptrold所指向的类型)个字节。

指针和指针进行加减:

两个指针不能进行加法运算,这是非法操作,因为进行加法后,得到的。

结果指向一个不知所向的地方,而且毫无意义。两个指针可以进行减法。

操作,但必须类型相同,一般用在数组方面,不多说了。

int array[10] =

一般而言数组名array代表数组本身,类型是int[10],但如。

果把array看做指针的话,它指向数组的第 0个单元,类型是int* ,所指向的类型是数组单元的类型即 int。

字符串相当于是一个数组,在内存中以数组的形式储。

存,只不过字符串是一个数组常量,内容不可改变,且只能是右值。如果。

看成指针的话,他即是常量指针,也是指针常量。

char *str[3]={

hello,thisisasample!",hi,goodmorning.",他们的内存是连在一起的,你可以访问。靠移位来。

helloworld"

总结:第一, 它代表整个数组,它的类型是 type[n];

第二, 它的外延是一个指针常量,该指针的类型是type*,该指针指向的类型是 type,也就是数组单元的类型,该指针指向的内存区就是数组第 0号单元,该指针自己占有单独的内存区,注意它和数组第 0号单元占据的内存区是不同的。该指针的值是不能修改的,即类似 array++的表达式是错误的。

第三, 数组名不能说是指针。

第四, 数组名神似指针。

第五, 数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;

第六, 指向数组的指针则是另外一种变量类型(在win32平台下,长度为4),仅仅意味着数组的存放地址!

第七, 数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;

第八, 很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。数组名比指针高贵。。

在不同的表达式中数组名array可以扮演不同的角色。

《C和指针》摘抄整理型笔记

读书笔记类型多种多样,有摘抄型的,有感想型的,有批注型的,有摘要型的 现在正在研读 c和指针 其中有很多我认为必要的知识点,摘抄并简单整理了一下,记录在这里。1.数值是以引用 reference 形式进行传递,也就是传址调用 标量和常量按值 value 传递。所有传递给函数的参数都是按值传递的,但是...

个人笔记复习

第一篇监理基础。第1章信息系统工程监理引论。1 信息化建设普遍存在的问题 1 系统质量不能满足应用的基本需求 2 工程进度拖后延期 3 项目资金使用不合理或严重超出预算 4 项目文档不全甚至严重缺失 5 在项目实施过程中系统业务需求一变再变 6 在项目实施过程中经常出现扯皮 推诿现象 7 系统存在着...

linuxcentos个人笔记

学习笔记 命令是shutdown,如下 重启 sudoshutdown rnow 关机 sudoshutdown hnow 重启也可以使用reboot命令 sudoreboot ctrl alt 退出光标。ctrl c 退出当前。alt ctrl f1 由 模式切换到桌面 少部分alt ctrl f...