前言:
现在朋友们对“c语言怎样将指针地址保存”都比较关心,同学们都想要剖析一些“c语言怎样将指针地址保存”的相关内容。那么小编同时在网上收集了一些对于“c语言怎样将指针地址保存””的相关内容,希望看官们能喜欢,同学们快快来了解一下吧!了解最新动态,请关注我的头条号: DG数据圈
指针,英文是pointer。
根据剑桥在线英语词典,pointer的本意如下:
something that is used for pointing at things, such as a long, thin stick that you hold to direct attention to a place on a map or words on a board, or a cursor.
直译过来就是:
用于指向事物的东西,例如一根细长的棍子,用于将注意力引导到地图上的某个地方或板上的文字,或光标。
我们以字符串为例,来介绍C里面指针的概念。
本文主要包括以下几个部分:
ASCII表: 找出"hello"对应的十六进制, 十进制以及二进制表示Debug: "hello"字符串在内存中的存储Debug: "hello"字符串对应的内存地址
1 ASCII 表: 找出"hello"对应的十六进制, 十进制以及二进制表示
C语言里,字符的类型,可以通过char来定义 (unsigned char这里不做讨论先)。
比如这段代码运行的结果是输出"h":
#include <stdio.h>int main(void){ char example = 'h'; printf("%c", example); return 0;}
在内存中, char类型的数据,即字符,是通过对照ASCII表后,以二进制的形式保存的。
ASCII表如下:
我们可以找到字母'h'以及'hello'对应的十六进制以及十进制表示, 比如:
Char: h
十六进制(hex): 68
十进制(dec): 104
通过换算,我们知道104的二进制表示是: 01101000。也就是说,在内存中,'h'是通过01101000来表示的。每一个0以及1是由通电状态下晶体管以及电容器的状态决定。这里也不展开说,就上个电路图先:
2 Debug: "hello"字符串在内存中的存储
在CLION中Debug,我们会看到'hello'在内存中的储存情况,最后面还多用了一位,储存'\0',Debug中显示的是字符在ASCII表中对应的十进制数字, 这也是为了方便理解做出的显示,不管Debug用几进制显示,对应的二进制都是一样的。比如'h'对应的是十进制是104。
#include <stdio.h>int main(void) { char hi[] = "hello"; printf("%s\n", hi); printf("%p\n", &hi); return 0;}
3 Debug: "hello"字符串对应的内存地址
'hello'对应的十六进制如下:
字符串: hello
十六进制: 68 65 6c 6c 6f
CLION在debug时,提供一个Memory View面板, 将内存中的二进制转换为十六进制后展现出来,应该是为了方便查看等原因这么做的。
我们通过它查看内存中字符串"hello"的地址及十六进制展现,它对应的地址是0x7ffee5047ae6(如下图。注:在不同电脑上运行,这个值会不一样),对应的值是68 65 6c 6c 6f。 这个地址(0x7ffee5047ae6)是'h'对应的地址,也用来代表整个字符串"hello"的地址。
如果你使用下面代码,则会输出"e"对应的地址, 比如为0x7ffee89a8af7, 也就是紧接着"h"的地址(0x7ffee5047ae6)后面。
printf("%p\n", &hi[1]);
下图我们可以看到程序运行完后的输出,也可以理解到,C语言的指针,是用来存放地址的。
这里打印指针的值, 即"hello"对应的内存地址,是通过使用地址运算符&以及格式说明符%p实现的:
printf("%p\n", &hi);
这次就介绍到这里,喜欢的欢迎点赞,关注。
本文作者:头条号DG数据圈,公众号德国数据圈
参考资料
标签: #c语言怎样将指针地址保存