本文目录一览:
- 1、在C语言中,可编址是什么
- 2、用c语言如何获取内存地址?
- 3、c语言可以直接访问内存地址吗
- 4、理解C语言指针和内存地址的关系
- 5、C语言编程中,内存物理地址是什么概念?
- 6、C语言中什么叫内存地址?
在C语言中,可编址是什么
可编址是指可以对
内存地址
值进行操作,如指针的使用就是可编址的具体表现~~
用c语言如何获取内存地址?
1、获得函数的地址
函数名实际上就是指针,所以可以通过强制类型转换来获取函数的地址。
int i = 0;
i = (int)main;
printf(“%d\n”,i);
这样我们就获取了main函数的地址了,其他的自定义的函数也是同样的道理啊。
2、获取变量地址
int variab = 0;
int addrvar = 0;
addrvar = (int)variab;
在变量addrvar中保存了变量variab的地址。
3、获得数组的地址
数组本身就是指针,它本身就是内存地址,和获得函数地址的方法一样啊。比如
int array[10];
int addrarr;
addrarr = (int)array;
c语言可以直接访问内存地址吗
您好,很高兴回答您的问题。在c语言中,是可以通过取地址符号来取出数据在内存中的地址的,也就是访问其数据所在位置的内存地址。可以定义指针变量如int *a,用来存放某个变量的内存地址。
理解C语言指针和内存地址的关系
一个内存地址存着一个对应的值,这是比较容易理解的。
如果程序员必须清楚地知道某块内存存着什么内容和某个内容存在哪个内存地址里了,那他们的负担可想而知。
汇编语法对“一个内存地址存着一个对应的数”,作了简单的“抽象”:把内存地址用变量名代替了,对内存地址的取值和赋值方式不变。
c语言对此进行了进一步的抽象:变量 ==
(一个内存地址,对应的值)(这里忽略类型等信息)。
把C语言中的基本类型(int,long,float等),指针,数组等还原为(一个内存地址,对应的值)后,就能更清淅地理解它们了。
内存就相当于(addr,val)的大hash表,c语句的语义基本就是改变hash值。
什么叫hash表?:根据关键码值key直接进行内存访问的数据结构。
为了下文的方便,特定义如下语义(遵循C的标准语义):
var==(addr, val)(var为一个变量名,addr为var在内存中的首地址,val为var的值)
var == addr
var==
var作为左值出现(即等式左边)时,var等价于 addr;
var作为右值出现(即等式右边)时,var等价于val;
*var == val
注:符号"=="右边出的等式x = y(x是一个内存地址,y是一个值);表示将内存地址为x的内容置为值y,如addr = 3表示置内存addr里的值为3
现在利用上面的语义解释一下这些例子:
int i = 3;
假设i的内存地址为0x8049320 ,那么这句话的语义是0x8049320 = 3,经过i =
3后,i为(0x8049320,3)
int b = i;
假设b的内存地址为0x8049324 ,那么这句话的语义是0x8049324 = i对应的val
= 3,此时b为(0x8049324,3)
int *p = b
指针p也是一个变量,int **p,int *p[8],在这些申明中p都只是一个指针变量,它和其他的变量的不同之处在于它的大小是定的,它的类型信息只是编译器用来进行类型检查和其他一些作用的(如果没有类型检查,你可以用任何的方式对一个变量进行操作如int i; ****i = 3)。假设p的地址为0x8049328,则根据p = b的语义p.addr = b.addr,p为(0x8049328,0x8049324)
*p = 5;
语义为0x8049324 = 5,此时只改变了内存地址为0x8049324的值,即改变了b的值(0x8049324,5),而p的值并未改变
int **q = p; //如果写为int **q = i; gcc编译不通过
假设q的内存地址为0x8049330,语义为0x8049330 = addr(p) = 0x8049328;所以q为(0x8049330,
0x8049328)
(int **q = i,要是编译过了则q应该表示为(0x8049330,
x),内存地址为x的地方表示为(x,0x8049320),那么地址x为多少呢? )
**q = 6
语义为val(val(q)) =
val(0x8049328) = 0x8049324 = 6,将内存地址为0x8049324的内容置为6,即将b的值置为6,b为(0x8049324,6)
对于结构,这些语义也适用,因为结构里的成员也是有对应地址的,也能表示为(addr,val)的形式。
C语言编程中,内存物理地址是什么概念?
用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。
C语言中什么叫内存地址?
任何一个变量或者一个程序都得需要给它分配一块内存空间,而这块内存空间的标识号码就把它叫做内存地址。内存地址是用16进制数表示的。
例如:ABC8F40
有了内存地址我们就可以更好的针对指定的内存进行操作,修改等。
比如一个变量是1,我们可以修改存放这个变量的内存地址的里的内容,把他改为2。
内存地址的访问通过指针来实现。