C语言高级
文章平均质量分 86
一只菜只因啦
这个作者很懒,什么都没留下…
展开
-
C语言高级06-函数指针和回调函数
通过函数类型定义的变量是不能够直接执行,因为没有函数体。只能通过类型定义一个函数指针指向某一个具体函数,才能调用。函数指针变量常见的用途之一是把指针作为参数传递到其他函数,指向函数的指针也可以作为参数,以实现函数地址的传递。这一点和数组一样,因此我们可以用一个指针变量来存放这个入口地址,然后通过该指针变量调用函数。C语言中的函数有自己特定的类型。一个函数在编译时被分配一个入口地址,这个地址就称为函数的指针,函数参数除了是普通变量,还可以是函数指针变量。指针函数是返回类型为指针的函数;// f 为函数类型。原创 2023-10-24 00:53:58 · 31 阅读 · 1 评论 -
C语言高级05-结构体
int age;}p1;//定义类型同时定义变量struct{int age;}p2;//定义类型同时定义变量//通过类型直接定义。原创 2023-10-23 23:46:19 · 20 阅读 · 0 评论 -
C语言04-多维数组
在绝大多数表达式中,数组名的值是指向数组第1个元素的指针。这个规则只有两个例外,sizeof和对数组名&。指针和数组并不相等。当我们声明一个数组的时候,同时也分配了内存。但是声明指针的时候,只分配容纳指针本身的空间。当数组名作为函数参数时,实际传递给函数的是一个指向数组第1个元素的指针。我们不单可以创建指向普通变量的指针,也可创建指向数组的指针。原创 2023-10-23 19:12:28 · 31 阅读 · 0 评论 -
C语言高级03-位运算
其思想是如果b是一个位(1或0),那么如果b为1则b^1为0,如果b为0,则1^b为1。4个位运算符用于整型数据,包括char.将这些位运算符成为位运算的原因是它们对每位进行操作,而不影响左右两侧的位。请注意该运算符不会改变a的值,a仍为2。左移运算符<<将其左侧操作数的值的每位向左移动,移动的位数由其右侧操作数指定。右移运算符>>将其左侧的操作数的值每位向右移动,移动的位数由其右侧的操作数指定。对于每个位,如果操作数中的对应位有一个是1(但不是都是1),那么结果是1.如果都是0或者都是1,则结果位0.原创 2023-10-23 17:25:37 · 24 阅读 · 0 评论 -
C语言高级02-指针强化
此时指针指向的就是“垃圾”内存。变量b是一个“指向整型的指针”,所以任何指向b的类型必须是指向“指向整型的指针”的指针,更通俗地说,是一个指针的指针。但从定义上看,NULL指针并未指向任何东西,因为对一个NULL指针因引用是一个非法的操作,在解引用之前,必须确保它不是一个NULL指针。注意:对一个int*类型指针解引用会产生一个整型值,类似地,对一个float*指针解引用会产生了一个float类型的值。通过一个指针访问它所指向的地址的过程叫做间接访问,或者叫解引用指针,这个用于执行间接访问的操作符是*。原创 2023-10-23 17:10:38 · 40 阅读 · 0 评论 -
C语言高级01-内存分区(数据类型、变量、程序内存分区模型)
realloc不会自动清理增加的内存,需要手动清理,如果指定的地址后面有连续的空间,那么就会在已有地址基础上增加内存,如果指定的地址后面没有空间,那么realloc会重新分配新的连续内存,把旧内存的值拷贝到新内存,同时释放旧内存。在理解C/C++内存分区时,常会碰到如下术语:数据区,堆,栈,静态区,常量区,全局区,字符串常量区,文字常量区,代码区等等,初学者被搞得云里雾里。在函数将参数压入栈中之后,函数体会被调用,此后需要将被压入栈中的参数全部弹出,以使得栈在函数调用前后保持一致。原创 2023-10-23 16:07:24 · 73 阅读 · 0 评论