本帖最后由 羽西 于 2023-3-15 10:17 编辑
本次与大家分享一些指针的知识,帮助大家进一步了解指针。废话就不多说了,直接进入正题; 首先,我们先回顾指针初步学习的几个重要的知识。 1.指针就是一个变量,用来存放地址,地址是一块空间的唯一标识 2.指针的大小是固定的,32位的是4字节,64位的是8字节. 3.指针是有类型的,类型决定了指针在加减整数的步长,指针在解引用的时候的权限 4.指针的运算。一般用于数组,两个地址的差的绝对值为元素个数。
思考以上这一行代码是什么意思呢?它真实存在吗? 答案是这一行代码在程序中是可以存在的,"hello"这串字符储存空间的首地址被存到了p中。由于"hello"是一个字符串常量,所以p是不能不能被更改的 - const char *p="hello";//这样写会更为严谨一些
复制代码
说到这,我们不得不说说两个程序: 第一个是: - #include
- int main()
- {
- char *p="hello";
- *p='w';//解引用,给p赋值,这里随便举的例子'w'
- printf("%s",p);
- return 0;
- }
复制代码
函数函数,函数有没有指针呢? 答案是有函数指针 函数指针怎么定义呢?它的方法与数组指针类似。 举个例子: - int txt(int x,int y)
- {}//函数txt
- //与数组指针相同先给一个变量P,由于是指针需要加上*,得到*p
- //然后找该指针指向空间内容的类型,此例题函数的类型是int (int,int)
- //的出结果
- int (*p)(int,int)=&txt;
- //这时,有些人脑洞大开,数组名为首元素地址,函数名是不是也有?
- //答案是没有,函数名也表示函数所在空间的地址,即txt与&txt等价
- int (*p)(int,int)=txt;//也是对的
复制代码好了,到这里我们本次的分享就结束了。感觉对你有帮助的,可以给我点个赞,让我知道你有所收获。如果期待下一次的分享,可以给我点个关注噢。如果有兴趣的可以思考一以下两行代码,它们出自《c陷阱和缺陷》,下一篇文章我会对此做一个简单的分享 - (*(void(*)())0)();
- void(*signal(int,void(*)(int)))(int);
复制代码
|