C语言
文章平均质量分 56
小哇123
这个作者很懒,什么都没留下…
展开
-
结构体数组、结构体指针、结构体二级指针
结构体指针、结构体指针数组原创 2023-01-17 15:21:44 · 357 阅读 · 0 评论 -
结构体二级指针、空指针、野指针
结构体指针原创 2023-01-16 14:22:02 · 715 阅读 · 0 评论 -
break、switch、continue
循环中的break与continue原创 2023-01-06 17:22:22 · 400 阅读 · 0 评论 -
多线程、进程、mutex
线程、锁原创 2023-01-05 16:57:28 · 110 阅读 · 0 评论 -
数组名、&数组名、指针;函数指针
数组名与&数组名原创 2023-01-04 11:30:19 · 172 阅读 · 0 评论 -
指针与数组作为sizeof() 与 strlen()的“参数“
sizeof与strlen原创 2022-10-28 11:35:30 · 343 阅读 · 0 评论 -
结构体中有指针成员的逐层malloc 与 free
malloc 和 free原创 2022-09-07 16:55:29 · 1918 阅读 · 0 评论 -
C语言-多线程-线程执行函数、互斥锁\线程函数malloc与free
多线程原创 2022-09-06 09:29:16 · 1182 阅读 · 0 评论 -
二级指针/传值、传址
二级指针/传值、传地址原创 2022-08-20 17:38:53 · 340 阅读 · 0 评论 -
二级指针的简单理解
二级指针原创 2022-08-09 16:12:26 · 373 阅读 · 0 评论 -
结构体指针一定要进行初始化,指针也要进行初始化
C语言原创 2022-07-01 15:05:41 · 1656 阅读 · 0 评论 -
通过malloc和指针,用传址的方式更改实参的值
C语言原创 2022-06-30 16:38:45 · 280 阅读 · 0 评论 -
C语言的传值和传址,指针的指针
函数调用的时候:传值和传址c语言的传值和传址 - 百度文库c传值:不改变主函数中实参的数值传址:把主函数中变量的地址直接传给给其他函数使用,改变了主函数中实参实际的数值。两者的区别就是:传值的话只在函数内部起作用,如果是传地址的话,经过一个函数过程,主函数中的实参就能够被实际地改变。对于数组,因为数组通常来说占的内存是比较大的,系统不会像传值一样在函数的内存空间中再复制一块内存进行数值传递,而是直接把地址传进去,直接更改数组的实参数值。系统对数组的内存比较苛刻。另外还涉及到指针的指针:传址:想通过函数实际地原创 2022-06-29 10:45:55 · 619 阅读 · 0 评论 -
数组作为函数参数时,最好将数组大小也作为一个函数参数
1.一个好的习惯:当数组作为函数参数时,最好将数组大小也作为函数的一个参数。2.如果数组大小不确定,再加上可能代码写的不严谨,可能导致数组溢出(数组越界),然而编译器也不报错的情况,比如下面这个例子,就说明了为什么最好把数组长度也作为一个参数进行明确。这是一个对数组元素求和并计算平均值的函数#include<stdio.h>int getAvgScore(int score[]){ int *p; int num = 0; int sum = 0; p = score原创 2021-09-07 13:49:31 · 1509 阅读 · 0 评论 -
函数指针与回调函数
1.函数指针是一个指针,是一个指向函数的指针,当使用该指针时,将会调用其指向的函数,也就是回调函数。2.函数指针——回调函数的好处:(1)调用回调函数的调用者无需关系回调函数是如何实现其功能的,只需要知道该函数能实现某种功能即可,这应该就是API接口那方面的内容吧。(2)使用函数指针调用回调函数,因为函数指针是指向函数的指针,所以这相当于是地址传递的方式,避免了地址传递带来的巨大开销。(此点目前暂时是这样理解,以int Add(int,int)函数为例,功能为计算两个参数之和。如果采用Add(A原创 2021-09-06 17:02:16 · 281 阅读 · 0 评论 -
函数返回值是指针的注意点、static限制子函数内部的局部变量、指向数组的指针如何表示数组元素
本内容主要研究指针类型的函数在返回指针时需要注意:不要返回函数内局部变量的指针。本想简单的写一个通过指针修改数组元素值的指针类型的函数,结果暴露的问题还真不少,说明基本功还是不够扎实。下面来看一下:当函数返回值类型是指针时需要注意的点:先看程序:#include<stdio.h>#include<string.h>int* GetNum(){ int array[10]; for (size_t i = 0; i < 10; i++) {原创 2021-09-06 10:49:54 · 349 阅读 · 0 评论 -
%s、%c、字符常量、字符串常量,const char*,指针数组,字符串数组总结
注:凡是说道字符串,基本就是字符串常量。看到这么一句话:提到const char*,就认为这个指针指向的是字符串。根据之前对常量指针和指针常量的理解,const char* p,表示一个常量指针,也就是指针指向的是常量,不能通过指针对数值进行修改...原创 2021-09-03 17:03:38 · 5780 阅读 · 1 评论 -
const char* 和 char* 、字符串常量
注:凡是说道字符串,基本就是字符串常量。看到这么一句话:提到const char*,就认为这个指针指向的是字符串。根据之前对常量指针和指针常量的理解,const char* p,表示一个常量指针,也就是指针指向的是常量,不能通过指针对数值进行修改。也就是*p=XXX,是错误的用法。为什么const char*就是针对字符串是用的呢,因为这是一个常量指针,字符串是常量,而且是存储在系统负责管理的常量存储区中的,编译器无权对其进行修改。而且又是char类型的指针,还是一个常量指针,自然就能够与字符串原创 2021-09-02 21:22:43 · 5569 阅读 · 0 评论 -
对指针的一点理解、二级指针、野指针、指针作为函数返回值
可能之前定义指针变量的时候总是用int *p这种形式,总是顺其自然的就认为*p是一个指针变量,实际上p才是指针变量,*p是一个表达式,*是取值运算符,不要再认为*p是指针变量了。int* p; p是一级指针int** p,p是一个二级指针,p是二级指针的名字。感觉还是int* p,int** p这样写更清楚一点,以后尽量少用int *p这种表达方式吧。指针变量名上也是不带*的,注意。下面的内容转自https://blog.csdn.net/chen1083376511/article/d原创 2021-09-02 11:18:11 · 319 阅读 · 1 评论 -
指针变量-printf %d和%p的含义
1.指针变量的值是地址,地址通常用16进制表示2.int a=1;int* p=&a;printf("%d\n",p);和printf("%p\n",p);有什么区别呢,输出的都是p的值,%p是把指针变量p中存储的a的地址以十六进制形式输出,%d是吧p中存储的a的地址以十进制形式输出。输出的都是p的值,不要理解成%p,是把p的地址输出。%p就是专门给指针变量使用的,输出指针变量中存储的值,也就是其他变量的地址,只不过是以十六进制形式输出。#include<stdio.原创 2021-09-02 11:05:58 · 7183 阅读 · 1 评论 -
指针的指针???。。。
指针的指针实在是困扰很久,到底指针的指针是用来做什么的呢?需要清楚一个地方:指针也是一个变量。下面看一个应用二级指针的例子吧。目的:希望通过子函数在堆中申请一块动态内存来存储结构体Data,并且修改结构体成员的数值。#include <stdio.h> #include <stdlib.h> typedef struct Data { int da; } Data; void fun(Data* p); int原创 2021-09-01 15:47:21 · 53 阅读 · 0 评论 -
数组名到底是不是指针
#include <stdio.h>#include <string.h>int main(void){ int a[3] = { 1, 2, 3 }; printf("%d\n", *a);//结果为1。此时数组名看起来又像是一个指针,但是却不能对这个指针进行++操作。此时可能产生疑问,好像数组名在不作为函数参数的时候也能当作指针使用?那么为什么说数组名作为函数参数的时候才退化为指针呢。实际上,数组名是这样使用的:数组名是一个指针,但是一个指针常量,其是一...原创 2021-08-31 15:59:30 · 7805 阅读 · 2 评论 -
const-只读变量-常量
之所以引出这个问题,是因为最近在看C语言运行时各种变量的内存分区情况,不太明确const 修饰的变量和字符串常量/数字常量等这些量是否存储在一起。#include <stdio.h>#include <string.h>int main(void){ int n = 2; int* pn = &n; printf("int n address is %d\n", pn); printf("\n"); const int i = 3;原创 2021-08-31 10:27:16 · 900 阅读 · 0 评论 -
指针常量与常量指针
https://www.cnblogs.com/witty/archive/2012/04/06/2435311.html原创 2021-08-30 15:29:15 · 64 阅读 · 0 评论 -
数组作为函数参数——指针常量/常量指针
之前一直认为数组名就是指针,其实不然。数组名作为函数参数时才会退化为指针,指针为函数参数时才会和数组名的使用是等效的。(注意,等效只是说效果相同,并不是等价,不能认为数组名就是指针,指针就是数组名。)下面的程序:有一个长度为4的float数组存放四个数,此数组作为一个计算平均值的函数的参数。#include <stdio.h>#include <string.h>float Avarage(float array[4]){ int i; float aver原创 2021-08-30 10:51:58 · 1523 阅读 · 0 评论 -
数组定义时,大小必须为常量
有时我们需要动态的确定数组的大小,可能会采用下面的方式:int n=5;int a[n];注意:上面这种定义方式是错误的,因为在定义数组时,必须明确确定数组的大小,如int a[5],数组大小一定要是一个常量,这样编译器才能给数据分配出确定且准确的空间。可以这样理解:1.定义数组时已经涉及到在内存的分配,编译器如果在给数组分配空间时发现数组的大小竟然没有直接给出,而是一个变量,如果这个变量又刚好没有初始化,系统随便分配了一个值,数组大小也是不确定的了。2.如果是出于想要根据需求动态分原创 2021-08-26 14:55:20 · 6087 阅读 · 0 评论 -
C语言:getchar()与缓存区
当我们用键盘敲入字符信息时,其实被敲入的字符存储到了缓存区中,当在屏幕上按下一系列字符(形成了字符串)与回车键的时候,在缓存区中也会有一个个字符与回车键(\n)作为字符出现。而getchar函数是从缓存区中对字符进行一个一个的读取。比如在屏幕按下abc后回车,出现在缓存区的是abc\n。程序每调用一次getchar()函数,getchar就从缓存区中读取一个字符存储到对应的变量中。同样,\n也会作为一个字符被getchar读取到。对于putchar()函数来说,作用是在屏幕上打印字符变量,如果p原创 2021-07-17 16:33:38 · 882 阅读 · 0 评论