c语言 程序,指针

c语言 程序,指针,第1张

不错,但是void fun(int a,int n,int odd,int even)中形参a是指针所以可以自加即a++

它对应main 中函数调用 fun(a,n,&odd,&even);此时a是数组。这个不能自加即a++

如果给子函数中的a++相当于main()中的函数中的数组移动一个int单位。即指针从a[0]移到下一个就指向a[1]

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。

计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占用 1 个字节。

为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份z号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。

C语言用变量来存储数据,用函数来定义一段可以重复使用的代码,它们最终都要放到内存中才能供 CPU 使用。数据和代码都以二进制的形式存储在内存中,计算机无法从格式上区分某块内存到底存储的是数据还是代码。

当程序被加载到内存后, *** 作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。

CPU 只能通过地址来取得内存中的代码和数据,程序在执行过程中会告知 CPU 要执行的代码以及要读写的数据的地址。

如果程序不小心出错,或者开发者有意为之,在 CPU 要写入数据时给它一个代码区域的地址,就会发生内存访问错误。这种内存访问错误会被硬件和 *** 作系统拦截,强制程序崩溃,程序员没有挽救的机会。

变量名和函数名为我们提供了方便,让我们在编写代码的过程中可以使用易于阅读和理解的英文字符串,不用直接面对二进制地址,那场景简直让人崩溃。

需要注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。

扩展资料

指针使用( 和 &

&a可以理解为(&a),&a表示取变量 a 的地址(等价于 pa),(&a)表示取这个地址上的数据(等价于 pa),绕来绕去,又回到了原点,&a仍然等价于 a。

&pa可以理解为&(pa),pa表示取得 pa 指向的数据(等价于 a),&(pa)表示数据的地址(等价于 &a),所以&pa等价于 pa。

对星号的总结

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

1、表示乘法,例如int a = 3, b = 5, c;  c = a b;,这是最容易理解的。

2、表示定义一个指针变量,以和普通变量区分开,例如int a = 100;  int p = &a;。

3、表示获取指针指向的数据,是一种间接 *** 作,例如int a, b, p = &a;  p = 100;  b = p;。

首先,你要明白一个概念,指针,是做什么的?答案是,指针,是指向地址的。

程序指针,指向的空间,在物理上是Flash,在逻辑上,就是代码空间。比如说51单片机的PC指针,指向的就是Flash,即程序下一步要执行的指令的地址。

数据指针,指向的空间,在物理上有Flash和RAM,在逻辑上是Flash里的常数空间和数据空间,注意,是对于单片机来说,对于我们的电脑,常数空间不是在Flash上。

比如说51单片机的DPTR,如果用MOVC

A,@A+DPTR,此时,就是指向常数空间,如果用

MOVX

A,@A+DPTR就是指向的数据空间。

堆栈指针,指向的空间,在物理上是RAM,在逻辑上,就是数据空间,是特定的数据空间,堆栈是数据空间中单独划分出来,专门用于寄存中间结果的内存空间。

数据指针和堆栈指针主要有两个区别:

一是数据指针可以指向Flash,即可以指向常数,比如说我们定义一个数组

unsigned

char

code

Table[99],此时,就是DPTR可以指向常数空间。堆栈指针是不可以的,只能是指向RAM。

第二个区别,堆栈指针指向的是特定的数据空间,这个特定的数据空间,是从整个数据空间里划分出来,专门用于作堆栈用的,堆栈区间一旦划分出来,堆栈指针在规则上,就只能在这个范围内活动,如果出了这个范围,可能导致整个程序的崩溃。而数据指针在规则上,可以指向整个数据空间,但是,可以读堆栈空间,不应该去修改,否则也可能导致程序的崩溃。

以上就是关于c语言 程序,指针全部的内容,包括:c语言 程序,指针、c语言指针详解、单片机中程序指针、数据指针、堆栈指针区别是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10637093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存