【番杰的学习笔记】关于“指针”的那些事儿
本帖最后由 番杰 于 2021-9-30 20:51 编辑0.前言:
最近为了回答几个小伙伴的问题,找了挺多的只指针的知识,在此记录一下,本人也是一位小萌新,若有帖子中出现错误,还请大家谅解,同时也请大家批评指出问题。
另外:这个帖子,我会不定时的添加或修改一些内容的。
1.指针
以char *p为例;
(1)指针p中存放的是地址,指向char类型数据的地址。
(2)指针p的大小是int类型(不同的编译器的int大小不同,本贴中的int类型大小均视为4字节),而不是char类型,char代表的是p指向的那个地址中的数据类型,
同时char也代表指针p的步长,即p每次移动的长度;
例如:指针p指向的地址为0,那么p+1则指向的地址是1。(步长为1个字节)
若使用int 定义指针p:int *p,
指针p指向的地址为0,那么p+1则指向的地址是4.(以int为4字节为例,此时步长为4字节)。
2.指针数组
以char *p = {“Fan”,“Jie”}为例;
(1)指针数组,说白了,它还是一个数组,只不过它存储的是“指向char类型的指针”。
(2)p的大小:8字节,数组中存放了2个指针,一个指针的大小是4字节(int类型),2个当然是8字节啦!(不懂的小伙伴赶紧回去好好看看上面的“1.指针”)。
(3)取值:此时p的取出值是“Fan”这个字符串的首地址,
而*p则是对该地址进行解引用,取出该地址中存储的值,即 ‘F’。
3.数组指针
char array = {'F','J'};
以char(*p) = &array为例;
(1)数组指针嘛,看名字就知道它是一个指针,一个指向数组的指针。
指针嘛,存储的一定是一个地址,指向啥就存放啥的地址,
p指向的是一个 ” char类型个元素的数组 “,所以p中存储的就是 “char类型个元素的数组的地址” 。
(2)p的大小:当让是4个字节啦(int类型),不管指针指向的是什么,它只要是指针,那么它的大小就是int类型(4字节)。
(3)p的步长:p指向数组,那么它的步长就是数组的大小,即2个char(2字节)。
例如:指针p指向的地址为0,那么p+1则指向的地址是2。(步长为2个字节)
若使用int 定义指针p:int (*p),
指针p指向的地址为0,那么p+1则指向的地址是8.(2个int的大小,此时步长为8字节)。
这个编译会报错
char(*p) = ['F','J']
改成这样吧
char(*p) = &(char ){'F', 'J'};
虽然这样也可以通过编译,但是有警告
char(*p) = {'F', 'J'};
人造人 发表于 2021-9-30 17:46
这个编译会报错
我本想写成这样的char(*p) = {'F', 'J'};,尴尬了。
感谢大佬提醒。
页:
[1]