- 博客(104)
- 收藏
- 关注
原创 C语言宏定义问题
C语言中,在定义数组时,因为数组长度需要是常量或者宏,尝试将变量按照值不同定义同一个宏的不同值,然后用宏来定义数组长度,结果发现不行。
2024-03-15 17:57:16 309
原创 C语言中,可以在子函数中动态申请一个指向二维数组的内存给调用函数使用么——看ChatGPT的回答——
这个行数组中每个元素,是指针!是的,可以在子函数中动态申请一个指向二维数组的内存,然后将其传递给调用函数使用。即先定义一个指向一维数组(可以当成行数组)的指针,即每个指针指向的是行数组,然后——关键的来了——C语言中,可以在子函数中动态申请一个指向二维数组的内存给调用函数使用么。下面是ChatGPT的回答,太专业了,比网上查的资料都好很多可能。之前还以为不行,只能以一维数组的形式返回呢。或者类似文中主函数调用赋值时写法,写成:p[i][j]
2024-03-15 17:31:56 351
原创 数组与指针之二——二级指针之一
这里用了两个&号,表示取两次地址,含义 上是没错的,这报错,是C语法的问题,是将前面一个&当成与操作,所以需要左值是变量或者函数调用形式,而右边只有括号里的&是真取了地址,所以报C2440,无法从int*转换为int**。可见,虽然&a是指向指针的指针,但如第一篇所述,它确是指向4个元素数组的指针,也就是指向一个行数组的首个元素,是有限制的,类型是int (*)[4],并不表示是指向一个int变量的地址,即int **。所以,重点来了,对于一维数组,这种二级指针其实是多此一举了,那么对于二维数组呢?
2024-03-08 10:56:16 287
原创 VS的__int64和linux的long long
个人理解,__int64是windows系统用,且VC6.0还不能用,且32为系统还不安全。long long是linux编译器g++ gcc等用的,其实是C99的标准。不知道对不,改天可以用g++编译器编译下定义为_int64的变量看看。
2024-02-27 16:08:59 329
原创 linux调用so库之一
可以看他的第一部分,即显式调用。但是会报错,我的版本是64位的Ubuntu 20.04.6 LTS。会发现直接用第一种方式的代码报错,dlopen函数返回是void *型指针,不能匹配原so库中调用函数的函数指针类型。这种是可以调用成功的,直接编译调用程序,生成.out文件执行即可。需要注意的是,dlopen函数打开so库时的路径需要设置为绝对路径。即定义一个函数指针类型,然后调用dlsym函数强制转换此类型。
2024-02-21 18:28:28 442
原创 windows系统用VS环境开发linux程序之一
按照文中所述,确实在本地和远程都有一样的文件夹。本地直接在VS中运行,即打开shell输出打印。在远程虚拟linux系统,则是进入到对应的文件夹,一般是projects,运行./***.out即可打印输出。正常是先建立linux工程,然后再设置连接虚拟linux系统。如果是要编译自己写的程序,则可以建linux空工程。主要有两种方法,一种是在windows中安装linux子系统,即WSL,另一种是windows系统装linux虚拟机。测试过可以设置自动连接,貌似也可以连上本地windows主机的网卡。
2024-02-21 16:59:10 430
原创 C或C++程序编译成dll给JAVA调用,接口函数声明注意
可以给每个接口函数前面加 extern "C" ,也可以像文中一样,直接将所有接口函数加{},一起加。且文中是针对C++编译器,其实也是,这里C++程序默认就是C++编译器了。我是C++程序,本地写C++程序调,随便写接口都可以,只需要将库定义写进去。但是给Java调用,发现是不能找到函数名,就出现上面文章开始的错误。总之,最好按照这种标准格式写,则库可以给各种语言用。
2024-02-05 09:50:11 333
原创 C/C++数组定义时长度之可以用变量么
这个参考资料是百度知道,居然质量还挺好。不管是C还是C++,其实都是动态申请内存,不影响使用,但是要注意释放。也明确说了VS是不可以的。貌似和编译器有关,有些编译器支持变量定义数组长度的。
2024-02-02 14:56:52 341
原创 VS之调用程序对DLL中全局变量的使用
接上篇《》,能够生成DLL,且能调用后,遇到一个问题,即在DLL程序中定义了一些全局变量,应用程序需要使用,本以为可以直接使用,没想到,还是需要设置才可以:这个亲测是对的。
2024-02-01 17:47:16 405
原创 C++结构体数组拷贝问题
先描述问题:dll库中定义的全局变量,在调用程序中只能使用,不能查看(显示未定义),怎样将dll中的全局变量结构体数组,拷贝到调用程序中。除了在调用程序中先定义一个较大的同类型结构体数组(确保数组长度比dll中全局变量结构体数组长),然后拷贝原数组长度的结构体变量外,是否可以用先申请一块和全局变量数组同样大小的内存,然后拷贝原数组这种方法呢?但是,再次调试程序,发现貌似可以。拷贝过去的内存完全可以当原数组一样使用,这是为什么呢?对于x86平台,是可以的。x64平台,编译通过,运行时内存拷贝语句直接报错。
2024-02-01 17:37:28 389
原创 isual Studio(VS) C++程序LNK2005错误,提示“error LNK2005: _XXX已经在xxx.obj中定义”解决方案
先记在这里吧。
2024-01-31 15:33:07 372
原创 手撕重采样,考虑C的实现方式
3、具体来说,插值,频谱变窄,即信号频带压缩了,如果不做处理,信号会包含带宽以外的噪声,所以需要做低通只滤出变窄的信号频带,去掉噪声。考查原始信号时间点和重采样后信号的时间点,一般来说,重采样信号的一个时间点,是处在原始信号的两个信号点之间(若重合,则直接不用计算),根据此时间点到原信号两个信号点的距离,用原信号这两个信号点插值得到重采样信号此点的信号幅值。1、对于原采样率fs,需要重采样到fs1,一般fs和fs1都是整数哈,则先找fs和fs1的最小公倍数,设为m,设m/fs=M,m/fs1 = L。
2024-01-24 11:20:02 710 1
原创 C和C++结构体初始化的不同
test.htest.c注意上面注释的语句,C语言,用注释语句和下面未注释语句这种初始化结构体rWavePeakHistory_nv都是可以的。但是,C++中则不行,只能用注释语句初始化结构体!main.c结果:编辑器及编译报错:另外,刚开始写错声明数组变量:将extern int32_t rWavePeakHistoryData_nv[RWAVE_PEAK_HISTORY_COUNT * 2];写成:extern int32_t rWavePeakHistoryData_nv;则报间接寻
2024-01-22 18:52:52 345
原创 C内存对齐问题
其中关于内存对齐,讲了结构体以及位域,以及一些容易出错的地方,非常好。下面提到的对齐模数就是上面提到的有效对齐值N。注意,这里讲位域只能用在结构体或联合体中。注意位域对齐,既要考虑自身字节存储时需不需要填充位,又要考虑整体作为结构体存储时需不需要填充字节。
2024-01-19 15:27:09 521
原创 指针取值运算符*和++运算符的优先级
可见此时p的值没变,还是指向数组第一个元素,值为1。在实际组合时,是看哪个和变量结合近,就优先执行哪个。具体说,*和++是同等优先级,是对的。先取值,再地址加1。将p又指向第一个元素,略。写的不详细,或者有不对。
2024-01-18 16:56:43 447
原创 C语言位域定义与使用
字节的高位低位,是按照从左到右顺序,取各位操作时,先按照字节顺序,先取低字节再取高字节,即是反过来取的。而在每个字节内部,又是先取低位再取高位,也是反过来的。但是,在取完后放置时,却是需要再反一下,即先取的放高位,后取的放低位,即高低位翻转了!其实也是因为先取的是原数据的低位,后取的是高位,所以放的时候,也是从右往左放,所以最终结果是高低位和取的顺序是反的。b2是第一个字节的第7位到第5位,即0 1 1,但是结果却是110,即6。b3是第二个字节的低4位,即1 0 1 1,结果却是1101,即13。
2024-01-18 15:33:24 416
原创 VS报错:error:LNK2005 _main 已经在 *.obj 中定义
实际上,多年以来一直有个问题困扰我很久,总弄不明白,就是一般一个头文件对应一个源文件,但是,一些数据类型、宏定义等,在头文件中定义,在源文件中使用,同时,在其他文件也要使用,那么源文件必须嵌入这个头文件,其他文件也需要嵌入这个头文件。然后,一些变量,在源文件中定义,别的源文件需要使用,则,就需要在头文件中声明。这些变量,是在源文件中定义的,在头文件声明,其他源文件只需要嵌入头文件,即可使用。其实,这些数据类型和宏,完全可以在源文件定义,然后在头文件再声明,和变量、函数是一样的处理。试运行程序,没有问题。
2024-01-13 10:19:09 425
原创 C语言:高地址和低地址、高字节与低字节、大小端模式的转换、存储顺序
和另外一篇栈的生长、存放顺序一样,一般描述栈的方向是相反的,即栈底在下,栈顶在上。注意大小端存储方式,简单讲小端是低字节低地址,高字节高地址,是顺的,大端是反的。另外,先后声明的变量,是先定义的存高地址,后定义的存低地址。数组,前面元素存低地址,后面高地址,也就是按地址增加存的。类、结构体的元素类似。
2024-01-11 10:22:26 402
原创 C语言堆栈地址定义
那么出栈方向是低地址向高地址,即,栈顶指针需要不断加,才能实现出栈(很多程序涉及到栈指针)但是高地址低地址是不变的,即栈底是高地址,栈顶是低地址,即栈增长方向是高地址向低地址。堆地址反过来,增长方向是从低地址向高地址。如果释放地址,则先释放高地址,再释放低地址。文章讲的很明白,但是一般,我们习惯栈底在下面,栈顶在上面,即和文章中反过来。
2024-01-10 14:46:03 372
原创 C读dat文件
c语言怎么读取dat数据 - 问答 - 亿速云 (yisu.com)c语言如何读取.dat文件-C语言-E安全 (easyaq.com)
2024-01-10 09:18:33 343
原创 C和C++代码混编时出现找不到C代码函数定义的问题
主函数是cpp文件,其他文件都是c文件,所以有上面题目。编译时,只要C++代码调用C代码就出现找不到函数定义问题。另一种解决办法是,将所有C源文件改为CPP文件。尝试将所有C头文件都在首尾加了。上面这篇文章讲得很明白了。
2024-01-10 09:16:12 385
原创 C语言深拷贝和浅拷贝问题
所以这在释放内存时会出问题,会导致原来拷贝结构体指针指向的动态内存没有指针指向它,也基本就无法释放了,后面如果涉及动态内存申请和释放,程序会报错。这里结构体里面的指针是指向了动态分配内存。其实就算是指向任何一个变量或者数组,拷贝结构体时都是浅拷贝,即,拷贝结构体的指针本身(值)被拷贝,也就是其指向被拷贝结构体指针指向的值,而不指向原来指向的值,原来指向的值就和这个指针脱离了。有些地方用结构体赋值代替memcpy结构体,结果是一样的,但是,个人认为,赋值不叫拷贝,应该就叫赋值,否则浅拷贝情况太多了。
2023-12-21 17:33:17 887
原创 C语言IIR双向滤波
设计一个通用的双向滤波程序,包括滤波函数和数组逆序函数,包含可以和matlab对数据的写数据代码。设计一个0.5~1Hz的IIR滤波器,用巴特沃斯或者契比雪夫2,看零极点图是稳定的。可以得到滤波器系数a,b.
2023-11-29 15:48:57 479
原创 MATLAB中字符和字符串操作
字符和字符串相互转,很多时候还是需要的。如下面的代码,需要判断一系列ASCII码,其实是判断字符串,首先fread读到的是数组型,经dec2hec转字符数组,还需要string转字符串型,才更好判断,当然用字符数组也可以判断。
2023-11-24 13:58:19 659
原创 Git拉取远程仓库代码覆盖本地,也就是放弃本地修改
全部拉取远程仓库文件覆盖本地文件。如果单独需要覆盖某个文件,可以将.换成。但是亲测是无效的,并不能将本地不存在但远程仓库存在的文件取回来。说的最多的是用:git fetch --all。正确的是:git checkout .
2023-11-24 10:46:13 769
原创 C语言 子函数调malloc申请内存返回给主函数使用——可行,但要注意!——修改、完全篇
一般情况,子函数中动态申请内存,将地址返回给主函数,理论上应该也是可以的,需要子函数返回动态内存地址,主函数实参是相应的地址变量即可。需要注意的是,需要传入二级指针,也就是主函数实参是指向地址变量的指针。那么实参即指向子函数内动态申请的内存,调用完后,需要释放内存,即释放实参即可。
2023-11-21 19:55:26 413
原创 VS中修改解决方案名称和项目名称
8、在解决方案下有根据各平台生成的debug文件夹,里面的文件,可以先删除,因为里面的文件名还是旧的项目名,在项目重新生成时会再生成新的名称,但是旧名称文件不会删除,所以可以先全部删除,甚至删除debug文件夹,工程重新生成时,会自动生成这个文件夹。3、可以打开解决方案,即双击.sln文件,然后在vs中右键解决方案,选重命名,输入确定即可。7、打开.sln文件,将之前名称的工程移除(右键移除),然后添加现有项目,选重命名的解决方案文件夹下重命名的.vcxproj,重新生成,重新生成解决方案。
2023-11-18 12:10:27 914
原创 C++堆内存错误:CRT detected that the application wrote to memory before start of heap buffer
C运行时出现这个错误,不会暂停到出错点,而是直接崩了。经检查,是free一个动态内存的指针出错。在写数据时,写到分配的动态内存地址以外,写的时候并不报错,但是在释放的时候就报这个错误。堆内存错误:应用程序在堆内存前写入了数据。堆是低地址到高地址写,反正前后都不能由应用程序写。暂时只碰到这个错误导致,应该还有其他情况也会报这个错。
2023-11-18 10:23:44 132
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人