侵权投诉

C语言指针详解

玩转单片机 2020-08-05 10:17 次阅读

1为什么使用指针

假如我们定义了 char a=’A’ ,当需要使用 ‘A’ 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 a( char 类型)只占了一个字节,指针本身的大小由可寻址的字长来决定,指针 p 占用 4 个字节。

但如果要引用的是占用内存空间比较大东西,用指针也还是 4 个字节即可。

使用指针型变量在很多时候占用更小的内存空间。

变量为了表示数据,指针可以更好的传递数据,举个例子:

第一节课是 1 班语文, 2 班数学,第二节课颠倒过来, 1 班要上数学, 2 班要上语文,那么第一节课下课后需要怎样作调整呢?方案一:课间 1 班学生全都去 2 班, 2 班学生全都来 1 班,当然,走的时候要携带上书本、笔纸、零食……场面一片狼藉;方案二:两位老师课间互换教室。

显然,方案二更好一些,方案二类似使用指针传递地址,方案一将内存中的内容重新“复制”了一份,效率比较低。

在数据传递时,如果数据块较大,可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存。

一个数据缓冲区 char buf[100] ,如果其中 buf[0,1] 为命令号, buf[2,3] 为数据类型, buf[4~7] 为该类型的数值,类型为 int ,使用如下语句进行赋值:

*(short*)&buf[0]=DataId; *(short*)&buf[2]=DataType; *(int*)&buf[4]=DataValue;

数据转换,利用指针的灵活的类型转换,可以用来做数据类型转换,比较常用于通讯缓冲区的填充。

指针的机制比较简单,其功能可以被集中重新实现成更抽象化的引用数据形式

函数指针,形如: #define PMYFUN (void*)(int,int) ,可以用在大量分支处理的实例当中,如某通讯根据不同的命令号执行不同类型的命令,则可以建立一个函数指针数组,进行散转。

在数据结构中,链表、树、图等大量的应用都离不开指针。

2 指针是什么?

操作系统将硬件和软件结合起来,给程序员提供的一种对内存使用的抽象,这种抽象机制使得程序使用的是虚拟存储器,而不是直接操作和使用真实存在的物理存储器。所有的虚拟地址形成的集合就是虚拟地址空间。

内存是一个很大的线性的字节数组,每个字节固定由 8 个二进制位组成,每个字节都有唯一的编号,如下图,这是一个 4G 的内存,他一共有 4x1024x1024x1024 = 4294967296 个字节,那么它的地址范围就是 0 ~ 4294967296 ,十六进制表示就是 0x00000000~0xffffffff ,当程序使用的数据载入内存时,都有自己唯一的一个编号,这个编号就是这个数据的地址。指针就是这样形成的。

1

#include  int main(void) {     char ch = 'a';     int  num = 97;     printf("ch 的地址:%p ",&ch);        //ch 的地址:00BEFDF7     printf("num的地址:%p ",&num);       //num的地址:00BEFDF8     return 0; }

指针不仅可以表示变量的地址,还可以存储各种类型数据的地址,指针变量是用来保存这些地址的变量,与数组类似,依据地址存放的数据类型,指针也分为 int 指针类型,  double 指针类型, char 指针类型等等。

综上,指针的实质就是数据在内存中的地址,而指针变量是用来保存这些地址的变量。

指针变量 和 指向关系

用来保存 指针 的变量,就是指针变量。如果指针变量p保存了变量 num的地址,则就说:p指向了变量num,也可以说p指向了num所在的内存块,指针变量pp指向了p所在的内存块,以下面为例:

#include  int main(void) {   int num = 97;   char ch = 'a';   int *p = & num;   int **pp = &p;   char *p1 = & ch;   printf("num 的地址:%p ",&num);      printf("指针p的值:%p ",p);      printf("指针p的地址:%p ",&p);     printf("指针pp的值:%p ",pp);    printf("ch 的地址:%p ",&ch);     return 0; }

运行结果

int型的num值为97占4个字节,内存地址为:0113F924,char 型的ch('a')值为97占1个字节,内存地址为:0113F91B。

int型占4个字节

char型占1个字节

num的地址为:0113F924,num的值为 97 ,指针 p 指向 num 的内存块,指针 p 地址为:0113F90C,p的内存保存的值就是num的地址0113F924。

0x0113F90C存储的内容为地址0113F924

指针变量 pp 指向 指针 p,指针 pp 内存值为 指针 p 的地址:0113F90C,形成了只想指针的指针。

指针pp为指向指针p的指针

定义指针变量

C语言中,定义变量时,在变量名 前 写一个 * 星号,这个变量就变成了对应变量类型的指针变量。必要时要加( ) 来避免优先级的问题。

引申:C语言中,定义变量时,在定义的最前面写上typedef ,那么这个变量名就成了一种类型,即这个类型的同义词。

int a ; //int类型变量 a int *a ; //int* 变量a int arr[3]; //arr是包含3个int元素的数组 int (* arr )[3]; //arr是一个指向包含3个int元素的数组的指针变量 int* p_int; //指向int类型变量的指针  double* p_double; //指向idouble类型变量的指针  struct Student *p_struct; //结构体类型的指针 int(*p_func)(int,int); //指向返回类型为int,有2个int形参的函数的指针  int(*p_arr)[3]; //指向含有3个int元素的数组的指针  int** p_pointer; //指向 一个整形变量指针的指针

取地址

既然有了指针变量,那就得让他保存其它变量的地址,使用& 运算符取得一个变量的地址。

int add(int a , int b) {     return a + b; } int main(void) {     int num = 97;     float score = 10.00F;     int arr[3] = {1,2,3};     int* p_num = #     float* p_score = &score;     int (*p_arr)[3] = &arr;                int (*fp_add)(int ,int )  = add;  //p_add是指向函数add的函数指针     return 0; }

特殊的情况,他们并不一定需要使用&取地址:

数组名的值就是这个数组的第一个元素的地址。

函数名的值就是这个函数的地址。

字符串字面值常量作为右值时,就是这个字符串对应的字符数组的名称,也就是这个字符串在内存中的地址。

int add(int a , int b){     return a + b; } int main(void) {     int arr[3] = {1,2,3};     int* p_first = arr;     int (*fp_add)(int ,int )  =  add;     const char* msg = "Hello world";     return 0; }

解地址

对一个指针解地址,就可以取到这个内存数据,解地址 的写法,就是在指针的前面加一个 * 号。

解指针的实质是:从指针指向的内存块中取出这个内存数据。

int main(void) {     int age = 19;     int*p_age = &age;     *p_age  = 20;  //通过指针修改指向的内存数据     printf("age = %d",*p_age);   //通过指针读取指向的内存数据     printf("age = %d",age);     return 0; }

空指针

空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或函数;而未初始化的指针则可能指向任何地方。空指针不是野指针。

C++语言中,我们让指针变量赋值为NULL表示一个空指针,而C语言中,NULL实质是 ((void*)0) ,  在C++中,NULL实质是0。

#ifdef __cplusplus      #define NULL    0 #else          #define NULL    ((void *)0) #endif

void*类型指针

void是一种特殊的指针类型,可以用来存放任意对象的地址。一个void指针存放着一个地址,这一点和其他指针类似。不同的是,我们对它到底储存的是什么对象的地址并不了解。

double a=2.3; int b=5; void *p=&a; cout<

由于void是空类型,只保存了指针的值,而丢失了类型信息,我们不知道他指向的数据是什么类型的,只指定这个数据在内存中的起始地址,如果想要完整的提取指向的数据,程序员就必须对这个指针做出正确的类型转换,然后再解指针。

数组和指针

同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或拷贝

数组在内存中是连续存放的,开辟一块连续的内存空间。数组是根据数组的下进行访问的。指针很灵活,它可以指向任意类型的数据。指针的类型说明了它所指向地址空间的内存。

数组所占存储空间的内存:sizeof(数组名) 数组的大小:sizeof(数组名)/sizeof(数据类型),在32位平台下,无论指针的类型是什么,sizeof(指针名)都是 4 ,在 64 位平台下,无论指针的类型是什么,sizeof(指针名)都是 8 。

数组名作为右值的时候,就是第一个元素的地址

int main(void) {     int arr[5] = {1,2,3,4,5};     int *p_first = arr;     printf("%d",*p_first);  //1     return 0; }

指向数组元素的指针 支持 递增 递减 运算。p= p+1意思是,让p指向原来指向的内存块的下一个相邻的相同类型的内存块。在数组中相邻内存就是相邻下标元素。

函数与指针

函数的参数和指针

C语言中,实参传递给形参,是按值传递的,也就是说,函数中的形参是实参的拷贝份,形参和实参只是在值上面一样,而不是同一个内存数据对象。这就意味着:这种数据传递是单向的,即从调用者传递给被调函数,而被调函数无法修改传递的参数达到回传的效果。

void change(int a) {     a++;      //在函数中改变的只是这个函数的局部变量a,而随着函数执行结束,a被销毁。age还是原来的age,纹丝不动。 } int main(void) {     int age = 60;     change(age);     printf("age = %d",age);   // age = 60     return 0; }

有时候我们可以使用函数的返回值来回传数据,在简单的情况下是可以的,但是如果返回值有其它用途(例如返回函数的执行状态量),或者要回传的数据不止一个,返回值就解决不了了。

传递变量的指针可以轻松解决上述问题。

void change(int* pa) {     (*pa)++;   //因为传递的是age的地址,因此pa指向内存数据age。当在函数中对指针pa解地址时,                //会直接去内存中找到age这个数据,然后把它增1。 } int main(void) {     int age = 160;     change(&age);     printf("age = %d",age);   // age = 61     return 0; }

比如指针的一个常见的使用例子:

#include  #include  #include  void swap(int *,int *); int main() {     int a=5,b=10;     printf("a=%d,b=%d ",a,b);     swap(&a,&b);     printf("a=%d,b=%d ",a,b);     return 0; } void swap(int *pa,int *pb) {     int t=*pa;*pa=*pb;*pb=t; }

在以上的例子中,swap函数的两个形参pa和pb可以接收两个整型变量的地址,并通过间接访问的方式修改了它指向变量的值。在main函数中调用swap时,提供的实参分别为&a,&b,这样就实现了pa=&a,pb=&b的赋值过程,这样在swap函数中就通过*pa修改了 a 的值,通过*pb修改了 b 的值。因此,如果需要在被调函数中修改主调函数中变量的值,就需要经过以下几个步骤:

定义函数的形参必须为指针类型,以接收主调函数中传来的变量的地址;

调用函数时实参为变量的地址;

在被调函数中使用*间接访问形参指向的内存空间,实现修改主调函数中变量值的功能。

指针作为函数的形参的另一个典型应用是当函数有多个返回值的情形。比如,需要在一个函数中统计一个数组的最大值、最小值和平均值。当然你可以编写三个函数分别完成统计三个值的功能。但比较啰嗦,如:

int GetMax(int a[],int n) {     int max=a[0],i;     for(i=1;ia[i]) min=a[i];     }     return min; } double GetAvg(int a[],int n) {     double avg=0;     int i;     for(i=0;i

其实我们完全可以在一个函数中完成这个功能,由于函数只能有一个返回值,可以返回平均值,最大值和最小值可以通过指针类型的形参来进行实现:

double Stat(int a[],int n,int *pmax,int *pmin) {     double avg=a[0];     int i;     *pmax=*pmin=a[0];     for(i=1;ia[i]) *pmin=a[i];     }     return avg/n; }

函数的指针

一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址。我们可以把函数的这个首地址赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。

函数指针的定义形式为:

returnType (*pointerName)(param list);

returnType 为函数返回值类型,pointerNmae 为指针名称,param list 为函数参数列表。参数列表中可以同时给出参数的类型和名称,也可以只给出参数的类型,省略参数的名称,这一点和函数原型非常类似。

用指针来实现对函数的调用:

#include  //返回两个数中较大的一个 int max(int a, int b) {     return a>b ? a : b; } int main() {     int x, y, maxval;     //定义函数指针     int (*pmax)(int, int) = max;  //也可以写作int (*pmax)(int a, int b)     printf("Input two numbers:");     scanf("%d %d", &x, &y);     maxval = (*pmax)(x, y);     printf("Max value: %d ", maxval);     return 0; }

结构体和指针

结构体指针有特殊的语法: -> 符号

如果p是一个结构体指针,则可以使用 p ->【成员】 的方法访问结构体的成员

typedef struct {     char name[31];     int age;     float score; }Student; int main(void) {     Student stu = {"Bob" , 19, 98.0};     Student*ps = &stu;     ps->age = 20;     ps->score = 99.0;     printf("name:%s age:%d ",ps->name,ps->age);     return 0; }

const 和 指针

指向常量的指针,值不能改变,指向可改变

常指针值能改变,指向不可改变

指向常量的常指针,都不能改变

#include    int main() {   // 1 可改变指针   const int a = 10;   int *p = &a;   *p = 1000;   printf("*p = %d ", *p);     // 2 可改变指针   const b = 10;   int *pb = &b;   pb = p;   printf("*pb = %d ", *pb);     // 3   const c = 10;   int * const pc = &c;   *pc = 1000;   //pc = pb;不能改变     //4   const d = 10;   const * int const pd = &d;   //*pd = 1000; 不能改变       printf(" ");   return 0; }

深拷贝和浅拷贝

如果2个程序单元(例如2个函数)是通过拷贝 他们所共享的数据的 指针来工作的,这就是浅拷贝,因为真正要访问的数据并没有被拷贝。如果被访问的数据被拷贝了,在每个单元中都有自己的一份,对目标数据的操作相互 不受影响,则叫做深拷贝。

#include  using namespace std; class CopyDemo { public:   CopyDemo(int pa,char *cstr)  //构造函数,两个参数   {      this->a = pa;      this->str = new char[1024]; //指针数组,动态的用new在堆上分配存储空间      strcpy(this->str,cstr);    //拷贝过来   } //没写,C++会自动帮忙写一个复制构造函数,浅拷贝只复制指针,如下注释部分   //CopyDemo(CopyDemo& obj)     //{   //   this->a = obj.a;   //  this->str = obj.str; //这里是浅复制会出问题,要深复制   //}   CopyDemo(CopyDemo& obj)  //一般数据成员有指针要自己写复制构造函数,如下   {      this->a = obj.a;     // this->str = obj.str; //这里是浅复制会出问题,要深复制      this->str = new char[1024];//应该这样写      if(str != 0)         strcpy(this->str,obj.str); //如果成功,把内容复制过来   }   ~CopyDemo()  //析构函数   {      delete str;   } public:      int a;  //定义一个整型的数据成员      char *str; //字符串指针 }; int main() {   CopyDemo A(100,"hello!!!");   CopyDemo B = A;  //复制构造函数,把A的10和hello!!!复制给B   cout <<"A:"<< A.a << "," <

根据上面实例可以看到,浅复制仅复制对象本身(其中包括是指针的成员),这样不同被复制对象的成员中的对应非空指针会指向同一对象,被成员指针引用的对象成为共享的,无法直接通过指针成员安全地删除(因为若直接删除,另外对象中的指针就会无效,形成所谓的野指针,而访问无效指针是危险的;

除非这些指针有引用计数或者其它手段确保被指对象的所有权);而深复制在浅复制的基础上,连同指针指向的对象也一起复制,代价比较高,但是相对容易管理。

原文标题:C语言指针详解

文章出处:【微信号:mcu168,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

中国移动在应对网络架构相关风险方面打造立体化的安全技术防护体系

与此同时,中国移动保障5G安全的步伐也越来越快。截至目前,中国移动在3GPP、ISO、ITU等国际标....
的头像 lhl545545 发表于 09-29 16:06 43次 阅读
中国移动在应对网络架构相关风险方面打造立体化的安全技术防护体系

G.657A2光纤的抗弯曲性到底有多厉害

G.652D光纤的最小弯曲半径是指:光纤以30mm半径松绕100圈,在1625nm测得的附加衰耗不超....
的头像 牵手一起梦 发表于 09-29 15:50 39次 阅读
G.657A2光纤的抗弯曲性到底有多厉害

数字中台赋能推动企业的营销数字化转型

包志刚表示,营销数字化有三个目标,一是通过数字化实现业务增长;二是实现商业模式的重构;三是实现企业组....
的头像 牵手一起梦 发表于 09-29 14:54 60次 阅读
数字中台赋能推动企业的营销数字化转型

许多C++开发人员则希望C语言灰飞烟灭?!

70年代初,贝尔实验室创建了C语言,它是开发UNIX的副产品。很快C就成为了最受欢迎的编程语言之一。....
的头像 嵌入式ARM 发表于 09-29 14:42 32次 阅读
许多C++开发人员则希望C语言灰飞烟灭?!

C语言中的短路现象

短路现象1 比如有以下表达式 abc 只有a为真(非0)才需要判断b的值;只有a和b都为真,才需要判....
的头像 嵌入式ARM 发表于 09-29 14:39 18次 阅读
C语言中的短路现象

如何实现对通信数据的CRC计算

前言 最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研究了一下,周末有时间整理了....
的头像 嵌入式ARM 发表于 09-29 14:26 43次 阅读
如何实现对通信数据的CRC计算

中移物联网公司研发推出自研的NB燃气一体化端到端解决方案

中移物联网公司自研的NB燃气一体化端到端解决方案基于中移物联网各项自研的核心能力构成,能有效解决智能....
的头像 lhl545545 发表于 09-29 11:49 77次 阅读
中移物联网公司研发推出自研的NB燃气一体化端到端解决方案

宁夏首家5G未来牧场示范基地的建成将推动公共数据互联开放共享

宁夏地处黄金奶源地,奶业是战略性主导产业,已成为全国奶业优势产区和优质高端乳制品重要原料基地。当前,....
的头像 lhl545545 发表于 09-29 11:16 82次 阅读
宁夏首家5G未来牧场示范基地的建成将推动公共数据互联开放共享

一个全新的数字经济时代正加速到来,催生数字生产力诞生发展

从狩猎时代到农业时代,人类经历了从打猎技术向耕种技术的跳跃式革命。200多年前,蒸汽机的发明代替了牛....
的头像 如意 发表于 09-29 11:15 96次 阅读
一个全新的数字经济时代正加速到来,催生数字生产力诞生发展

什么是人工智能领导者?

1.从试点开始,然后在整个企业范围内扩展人工智能。成功的实施始于需要人工智能的特定用例,并在这些试点....
的头像 我快闭嘴 发表于 09-29 09:09 142次 阅读
什么是人工智能领导者?

如何使用三项举措提高数据专业化治理水平呢?

“人们常说要用数字说话,用数字管理,用数字决策,用数字创新,可以说社会治理的每一个方面,都离不开数字....
的头像 lhl545545 发表于 09-29 09:03 58次 阅读
如何使用三项举措提高数据专业化治理水平呢?

在集成设备中获取RF硬件表征数据变化的思路和方案设计

一些 5G 系统的制造商正在转向更高水平的硬件集成,并在片上系统(SoC)设备中整合射频转换器和基带....
发表于 09-28 17:29 119次 阅读
在集成设备中获取RF硬件表征数据变化的思路和方案设计

数据销毁的方法有哪些

数据删除指的数据不再存在,应用和最终用户看不到数据。但采用一定技术手段,数据还可以被找回,甚至有时能....
的头像 电子魔法师 发表于 09-28 16:44 107次 阅读
数据销毁的方法有哪些

“清洁 5G 网络”计划对华为 5G 业务产生哪些明确影响?

华为常务董事、产品投资评审委员会主任汪涛在华为全联接大会 2020 的媒体见面会上指出,数字世界需要....
的头像 lhl545545 发表于 09-28 15:36 198次 阅读
“清洁 5G 网络”计划对华为 5G 业务产生哪些明确影响?

全球移动供应商推出了一种或多种符合 3GPP 标准的 5G 商用服务

全球推出 5G 商用服务的电信运营商超过 100 家,源自全球移动供应商协会 (GSA)上周在官网公....
的头像 lhl545545 发表于 09-28 15:28 137次 阅读
全球移动供应商推出了一种或多种符合 3GPP 标准的 5G 商用服务

无人机如何正确布设像控点,有哪些关键点需要注意

对无人机操作和演示的要求也越来越高。其间布设像控点是要害的一环。这也直接决定着无人机航测成果的展现,....
发表于 09-28 11:32 42次 阅读
无人机如何正确布设像控点,有哪些关键点需要注意

是德科技发布了一款基于原生云的分布式网络性能和安全性测试软件

CyPerf 基于网页的图形用户界面使用户可以查看各种网元并与之进行交互,这些网元对于仿真网络行为至....
的头像 lhl545545 发表于 09-28 10:45 240次 阅读
是德科技发布了一款基于原生云的分布式网络性能和安全性测试软件

MISRA—C关于数据类型的规则及陷阱有哪些

数据类型是编程语言中最基本的构成元素,但却是最易被忽略的一环,程序员愿意把几乎100%的精力都花在算....
的头像 电子设计 发表于 09-28 10:06 170次 阅读
MISRA—C关于数据类型的规则及陷阱有哪些

了解内存:如何在嵌入式C语言中使用结构

处理器如何访问内存?了解有关C语言结构以及如何使用它们的更多信息。 本文将首先解释内存访问粒度的概念....
的头像 嵌入式星球 发表于 09-28 09:46 72次 阅读
了解内存:如何在嵌入式C语言中使用结构

电路方程矩阵形式的习题与解答免费下载

本文档的主要内容详细介绍的是电路方程矩阵形式的习题与解答免费下载。
发表于 09-28 08:00 10次 阅读
电路方程矩阵形式的习题与解答免费下载

C语言的100个经典算法免费下载

本文档的主要内容详细介绍的是C语言的100个经典算法免费下载。
发表于 09-28 08:00 20次 阅读
C语言的100个经典算法免费下载

使用Verilog硬件描述语言实现简易函数发生器的设计说明

简易函数信号发生器在电路实验和设备检测中具有十分广泛的用途。在基于QUARTUS2软件平台下,运用V....
发表于 09-27 16:41 13次 阅读
使用Verilog硬件描述语言实现简易函数发生器的设计说明

浅谈人工智能三要素,关键是数据优势

科技行业发展滚滚向前,不过一直以来,中国科技行业都是一个追随者,可以说在PC时代我们是一个完全的学习....
的头像 39度创意研究所 发表于 09-27 16:17 406次 阅读
浅谈人工智能三要素,关键是数据优势

石油储量有限,中国储量为36亿吨占全球储量1.5%

石油作为非可再生资源,其储量十分有限。当前石油主要集中沙特阿拉伯地区。石油消费和生产方面,自2018....
的头像 牵手一起梦 发表于 09-27 16:07 240次 阅读
石油储量有限,中国储量为36亿吨占全球储量1.5%

中药材质量追溯系统的应用,它的意义是什么

传统医药学非常注重药源的道地性:两汉时期的《神农本草经》土地所出,真伪陈新,并各有法历代《本草》均有....
发表于 09-27 16:06 160次 阅读
中药材质量追溯系统的应用,它的意义是什么

学习嵌入式C编程语言:了解联合数据对象

嵌入式C中struct与union的区别 在本系列的上一篇文章中,我们讨论了嵌入式C中的结构允许我们对不同数据类型的变量进行分组并...
发表于 09-27 15:55 202次 阅读
学习嵌入式C编程语言:了解联合数据对象

了解内存:如何在嵌入式C语言中使用结构

处理器如何访问内存?了解有关C语言结构以及如何使用它们的更多信息。 本文将首先解释内存访问粒度的概念,以便我们可以对处理...
发表于 09-27 15:45 101次 阅读
了解内存:如何在嵌入式C语言中使用结构

别搞错啦 "曙光节能"企业正式更名为"曙光数创"了

9月2日,曙光节能技术(北京)股份有限公司成功更名为:曙光数据基础设施创新技术(北京)股份有限公司,....
的头像 电子发烧友网工程师 发表于 09-27 14:44 148次 阅读
别搞错啦 "曙光节能"企业正式更名为"曙光数创"了

新能源车现阶段尚未取代燃油车的原因,真的是里程限制吗?

都知道纯电动车型是未来车市发展的主流趋势,排放污染低,不限号不限行,还免购置税,出行成本低,是多方共....
的头像 lhl545545 发表于 09-27 14:20 229次 阅读
新能源车现阶段尚未取代燃油车的原因,真的是里程限制吗?

嵌入式C语言源代码优化方案 主要优化程序的执行速度

1、选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入....
的头像 strongerHuang 发表于 09-27 11:45 128次 阅读
嵌入式C语言源代码优化方案  主要优化程序的执行速度

IBM商业价值研究院正在进行一项针对全球消费者的调查

IBM Services 高级管理合伙人 Jesus Mantas 表示:“我们的数据表明,许多人在....
的头像 IBM中国 发表于 09-27 11:35 441次 阅读
IBM商业价值研究院正在进行一项针对全球消费者的调查

通过一些附加信息和有用的实现技术对C函数的探索

在本文中,我们将通过一些附加信息和一些有用的实现技术来结束对C函数的探索。 基本的C函数(例如,一个....
的头像 multisim 发表于 09-27 11:11 89次 阅读
通过一些附加信息和有用的实现技术对C函数的探索

如何得当使用C语言的特殊的用法

C语言有很多特殊的用法,如果这些特殊用法使用得当,会是你的代码变得更加有健壮,更加容易维护。 比如我....
的头像 strongerHuang 发表于 09-27 10:41 95次 阅读
如何得当使用C语言的特殊的用法

数据团队如何设置自己的KPI体系?

笔者为业务部门做过成百上千的报表,虽然只做报表上不了台面,但报表却是数据团队对于业务最大的贡献,其核....
的头像 lhl545545 发表于 09-27 10:16 190次 阅读
数据团队如何设置自己的KPI体系?

了解嵌入式C:什么是结构?

本文提供了有关嵌入式C编程中的结构的一些基本信息。在介绍了结构之后,我们将看一下这个强大的数据对象的一些重要应
的头像 嵌入式星球 发表于 09-27 09:59 64次 阅读
了解嵌入式C:什么是结构?

了解嵌入式C:什么是结构?

本文提供了有关嵌入式C编程中的结构的一些基本信息。 在介绍了结构之后,我们将看一下这个强大的数据对象的一些重要应用。然后...
发表于 09-27 09:24 202次 阅读
了解嵌入式C:什么是结构?

C++ Primer Plus的PDF的电子书免费下载

本书全面讲述了C语言编程的相关概念和知识。全书共17章。第1、2章学习C语言编程所需的预备知识。第3....
发表于 09-27 08:00 17次 阅读
C++ Primer Plus的PDF的电子书免费下载

C语言内存操作的陷阱!你踩过坑吗?

[table] [tr][td] 1、返回局部变量的地址,或者返回指向局部变量的指针 int *stackref() {     int val; &...
发表于 09-26 16:02 101次 阅读
C语言内存操作的陷阱!你踩过坑吗?

【大联大友尚安森美半导体感光芯片USB双目摄像头模组试用体验】敏感人群自动追踪系统开发

感谢主办方提供的双目摄像头提供测试。本项目利用双目摄像头模组+LattePanda Delta 432+NCS2神经棒部署openvino做一个敏感...
发表于 09-26 14:46 0次 阅读
【大联大友尚安森美半导体感光芯片USB双目摄像头模组试用体验】敏感人群自动追踪系统开发

C语言固件中指针的使用方法

有两个与指针关联的值。第一个是存储在指针本身中的存储地址,第二个是存储在该存储地址中的数据。要修改存....
的头像 multisim 发表于 09-26 11:38 109次 阅读
C语言固件中指针的使用方法

SPI总线驱动的C语言源代码详细概述

本文档的主要内容详细介绍的是SPI总线驱动的C语言源代码详细概述。
的头像 Wildesbeast 发表于 09-26 11:36 164次 阅读
SPI总线驱动的C语言源代码详细概述

人民网点评TikTok出售事件,切莫指望通过装疯卖傻的套路来占便宜

关于对源代码的审查,是“TikTok交易”协议最为各方关注的焦点议题。源代码是TikTok这类互联网....
的头像 如意 发表于 09-26 11:22 300次 阅读
人民网点评TikTok出售事件,切莫指望通过装疯卖傻的套路来占便宜

I2C总线驱动的C语言源程序详细说明

 i2c 总线上单片机系统中常用到的总线技术这里给大家介绍一个I2C总线驱动的C51语言源程序。
的头像 Wildesbeast 发表于 09-26 11:07 171次 阅读
I2C总线驱动的C语言源程序详细说明

云徙科技将业务切口聚焦于企业数据智能领域?

实际上,中台的规模化应用绝没有这么简单。首先,业务中台建设工程量大,包括需求调研、分析、测试、生产环....
的头像 lhl545545 发表于 09-26 09:16 526次 阅读
云徙科技将业务切口聚焦于企业数据智能领域?

多模数据库驱动下,助力 AI 逼近“人类智能”?

截至目前,针对海量数据的处理,业内既有的数据产品多只能解决某一类问题,譬如 Hive 应用于结构化数....
的头像 lhl545545 发表于 09-25 17:05 246次 阅读
多模数据库驱动下,助力 AI 逼近“人类智能”?

物联网如何改善商业建筑的水资源监测应用?

鉴于对水资源短缺、用水成本以及水质问题的日益关注,商业建筑业主被迫更加关注水资源管理。
的头像 如意 发表于 09-25 15:09 193次 阅读
物联网如何改善商业建筑的水资源监测应用?

c语言中一些花里胡哨的写法

转自:嵌入式Linux 我觉得这是一个送分题,奈何知乎人才太多了,给出了各种古怪的写法,如果是做项目....
的头像 strongerHuang 发表于 09-25 14:39 114次 阅读
c语言中一些花里胡哨的写法

Geode AI通过高级分析和简化的数据融合为业务决策提供了更高的清晰度

“如今,企业洞察功能比以往任何时候都需要帮助来集成和激活与其业务问题相关的许多数据流,”伯克首席研究....
的头像 倩倩 发表于 09-25 11:10 155次 阅读
Geode AI通过高级分析和简化的数据融合为业务决策提供了更高的清晰度

通过采用4D GRAVITY技术提高无人机的机身性能

如何提升无人机的抗风性,提高其飞行速度,增强其续航能力,一直是无人机公司关注的重要问题。目前,市面上....
发表于 09-25 11:08 59次 阅读
通过采用4D GRAVITY技术提高无人机的机身性能

手绘图的方式带你了解机器学习模型构建的全流程

周末在家无聊闲逛github,发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全....
的头像 人工智能与大数据技术 发表于 09-25 11:07 138次 阅读
手绘图的方式带你了解机器学习模型构建的全流程

想通过数据竞赛来提升实践能力,作为小白有什么入门经验

想通过数据竞赛来提升实践能力,作为小白有什么入门经验? 李玲 - 携程算法工程师 (1)首先是笔试,....
的头像 人工智能与大数据技术 发表于 09-25 10:49 86次 阅读
 想通过数据竞赛来提升实践能力,作为小白有什么入门经验

使用人工智能(AI)技术确定鲸鱼的位置

“不幸的是,2018年和2019年是有记录的加利福尼亚海岸外致命的鲸船相撞最糟糕的年份,”兼任鲸鱼安....
的头像 倩倩 发表于 09-25 10:40 166次 阅读
使用人工智能(AI)技术确定鲸鱼的位置

Q2季度LTE用户数增长一倍,预计2025年全球移动用户数将接近103亿

根据Omdia提供给GSA的最新报告数据显示,截至2020年第二季度,全球LTE用户数达到55.5亿....
的头像 牵手一起梦 发表于 09-24 16:48 139次 阅读
Q2季度LTE用户数增长一倍,预计2025年全球移动用户数将接近103亿

蓝鹏全新测控软件平台可实现网络化的监控

20世纪70年代以来,计算机、微电子等技术迅猛发展。在它们的推动下,同时也是为了适应现代化工农业生产....
的头像 牵手一起梦 发表于 09-24 16:14 199次 阅读
蓝鹏全新测控软件平台可实现网络化的监控

执行大量的for循环及嵌套,数组结果溢出

[code]     for(k=0;k
发表于 09-23 10:40 0次 阅读
执行大量的for循环及嵌套,数组结果溢出

ARM嵌入式学习知识图谱-C语言入门系列文章

想要做ARM开发,C语言绝对是重中之重,在这方面是是没有捷径可以走的,这篇文章为大家收集了论坛的优秀C语言初级文章,希望...
发表于 09-23 10:05 303次 阅读
ARM嵌入式学习知识图谱-C语言入门系列文章

HarmonyOS应用开发-API参考

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软...
发表于 09-22 15:14 101次 阅读
HarmonyOS应用开发-API参考

什么是嵌入式_如何入门和提高嵌入式

因为首先,嵌入式有不少组合名词,例如嵌入式系统,嵌入式软件,Linux嵌入式,Android嵌入式,....
发表于 09-21 15:00 172次 阅读
什么是嵌入式_如何入门和提高嵌入式

写出高效的嵌入式C程序

编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。 ...
发表于 09-17 11:00 297次 阅读
写出高效的嵌入式C程序

STM8 C语言精品编程100例

发表于 09-16 15:53 226次 阅读
STM8 C语言精品编程100例