C语言之指针详解
目录
地址
指针的定义和使用
数组与指针的区别与联系
字符串与指针的用法
C 中的 NULL 指针
指针的算术运算
指向指针的指针
传递指针给函数
从函数返回指针
在学习指针之前,我们先弄清楚一个概念:
地址
地址在计算机内存中是一个唯一的标识符,用于指示变量或数据在内存中的位置。简单地说:地址就是可以唯一标识某一点的一个编号,即一个数字!我们都见过尺子,我们统一以毫米为单位,一把长1000毫米的尺子,其范围区间为0~999,而我们可以准确的找到35毫米、256毫米处的位置。
在C语言中,每个变量都在内存中占据一定的空间,这些空间是连续的,并且每个空间都有一个唯一的地址。通过使用取地址运算符&,我们可以获取变量的地址。例如,对于一个整型变量x,可以使用&x来获取它的地址。
地址通常以十六进制表示法来表示,因为它更紧凑且易于阅读。在C语言中,我们可以使用指针来存储和操作地址。指针是一种特殊的变量类型,它可以存储一个地址值。
通过指针,我们可以实现对变量的间接访问。通过解引用运算符*,我们可以访问指针所指向的地址处存储的值。例如,如果有一个指向整型变量的指针ptr,可以使用*ptr来获取该变量的值。
总而言之,地址在C语言中是非常重要的概念,它允许我们直接访问和修改变量的值。通过使用指针,我们可以存储和操作这些地址。地址的表示通常以十六进制形式呈现,方便理解和使用。
指针的定义和使用
指针是C语言中的一个重要概念,它允许程序直接访问和修改变量的值。在C语言中,指针是一种特殊的变量类型,它可以存储一个内存地址。
指针的定义方式如下:
type *pointer_name;
其中,type表示指针所指向的变量类型,pointer_name是指针变量的名称。例如,如果有一个整型变量x,可以定义一个指向该变量的指针如下:
int *ptr;
这样就定义了一个名为ptr的指向整型变量的指针。注意,在定义指针时,需要使用*运算符来指示该变量是一个指针变量。
指针的使用可以分为两个方面:指针的赋值和指针的解引用。
指针的赋值可以通过将一个变量的地址赋值给指针变量来实现。例如,如果有一个整型变量x,可以将它的地址赋值给指针变量ptr如下:
int x = 10;
int *ptr = &x;
这样就将ptr指向了x的地址。注意,在赋值时,需要使用取地址运算符&来获取变量x的地址。
指针的解引用可以通过解引用运算符*来实现。例如,如果有一个指向整型变量的指针ptr,可以使用*ptr来获取该变量的值。例如:
int x = 10;
int *ptr = &x;
printf("%d", *ptr); // 输出10
这样就输出了x的值。
除了指针的赋值和解引用之外,还有一些其他的指针操作,例如指针的算术运算、指针与数组的关系、指针的类型转换等等。这些操作都是指针的进阶知识,需要更深入的学习和理解。
总之,指针是C语言中非常重要的概念,它允许程序直接访问和修改变量的值。指针的定义方式为type *pointer_name,指针的赋值和解引用可以通过&和*运算符实现。
数组与指针的区别与联系
C语言中的数组和指针都是非常重要的概念,它们在很多情况下可以互相转换和使用。但是,数组和指针之间也存在一些区别。
首先,数组是一种特殊的数据结构,它可以存储一组相同类型的数据。在C语言中,数组的定义方式如下:
type array_name[array_size];
其中,type表示数组元素的类型,array_name是数组的名称,array_size是数组的大小。例如,如果有一个包含5个整型元素的数组,可以定义如下:
int arr[5];
指针是一种特殊的变量类型,它可以存储一个内存地址。在C语言中,指针的定义方式如下:
type *pointer_name;
其中,type表示指针所指向的变量类型,pointer_name是指针变量的名称。例如,如果有一个整型变量x,可以定义一个指向该变量的指针如下:
int *ptr = &x;
指针的值可以通过解引用运算符*来获取。例如,可以使用*ptr来获取指针所指向的变量的值。
虽然数组和指针看起来有些不同,但它们之间也存在一些联系。首先,数组名可以被解释为指向数组第一个元素的指针。例如,如果有一个整型数组arr,则可以使用arr或&arr[0]来获取数组第一个元素的地址。
其次,指针和数组之间可以进行互相转换。例如,可以使用指针加法运算来遍历数组元素,也可以使用数组下标来访问指针所指向的内存。例如:
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 将数组名赋值给指针
for (int i = 0; i < 5; i++) {printf("%d ", *(ptr + i)); // 使用指针遍历数组元素
}
printf("\n");
printf("%d\n", *(arr + 2)); // 使用数组名访问指针所指向的内存//输出:1 2 3 4 5
//输出:3
这样就可以使用指针和数组来访问和修改同一个数据。
总之,数组和指针是C语言中非常重要的概念,它们在很多情况下可以互相转换和使用。数组是一种特殊的数据结构,用于存储一组相同类型的数据,而指针是一种特殊的变量类型,用于存储一个内存地址。数组名可以被解释为指向数组第一个元素的指针,指针和数组之间可以进行互相转换。
字符串与指针的用法
前面我们已经讨论过字符数组与字符串,字符指针和字符数组都可以用来存储字符串,但它们有着本质的区别:字符指针str是个变量,可以改变str使它指向不同的字符串,但不能改变str所指向的字符串常量的值。而string是一个数组,可以改变数组中保存的内容。应注意字符串指针和字符串数组的区别。
字符串指针是一种特殊的指针类型,它用于指向以空字符('\0')结尾的字符串。
字符串指针定义的语法格式为:
char *str;
其中,char:表示字符类型。*:表示指针类型的声明符号,用于声明一个指针变量。str:是指针变量的名称。
可以通过以下几种方式来初始化字符串指针:
1、直接将字符串常量赋值给字符串指针
char *str = "Hello, world!";
这种方式会将字符串常量的首地址赋值给字符串指针,使其指向该字符串。
需要注意的是,使用字符串常量初始化字符串指针时,不能通过指针来修改字符串中的内容,因为字符串常量是只读的。如果需要修改字符串中的内容,应该使用字符数组。
2、将字符数组的首地址赋值给字符串指针
char string[] = "Hello, world!";
char *str = string;
这种方式会将字符数组的首地址赋值给字符串指针,使其指向该字符数组。
与字符串常量不同,使用字符数组初始化字符串指针时,可以通过指针来修改字符数组中的内容。
3、动态分配内存并将其地址赋值给字符串指针
char *str = (char*)malloc(sizeof(char) * 20);
strcpy(str, "Hello, world!");
这种方式会动态分配一段内存空间,并将其地址赋值给字符串指针。可以使用strcpy()函数将字符串常量或字符数组的内容复制到动态分配的内存空间中。
需要注意的是,在使用完动态分配的内存空间后,应该使用free()函数将其释放,以避免内存泄漏。
总之,字符串指针是一种非常常用的数据类型,在C语言中被广泛地应用于字符串处理、文件操作等方面。需要注意的是,在使用字符串指针时,应该注意指针的有效性和字符串的长度,避免出现指针越界或内存泄漏等问题。
C 中的 NULL 指针
在C语言中,NULL指针是一个特殊的指针值,表示指针不指向任何有效的内存地址。它是一个预定义的宏,通常被定义为整数0。
当一个指针被赋值为NULL时,它就指示不再指向任何有效的对象或函数。这在编程中很有用,可以用来表示指针的初始状态或者指针未被初始化的情况。
下面是一些关于NULL指针的重要事实和使用方式:
1、初始化指针:在声明指针变量时,可以将其初始化为NULL,例如:int *ptr = NULL;。这样做可以确保指针不会包含任意的垃圾值。
2、检查指针是否为NULL:在使用指针之前,通常需要检查它是否为NULL,以避免访问无效的内存地址。可以使用条件语句(如if语句)来检查指针是否为NULL,例如:
if (ptr == NULL) {// 指针为空的处理逻辑
}
3、作为函数返回值:当函数无法成功执行某个操作时,可以将NULL作为函数的返回值,用于表示失败或错误的情况。调用函数后,可以检查返回的指针是否为NULL,以确定函数是否成功执行。
4、动态内存分配失败:在使用动态内存分配函数(如malloc、calloc等)分配内存时,如果分配失败,函数将返回NULL指针。因此,在使用动态内存之前,应该检查返回的指针是否为NULL,以确保成功分配了所需的内存。
需要注意的是,对NULL指针进行解引用操作是非法的,会导致程序崩溃或未定义行为。因此,在使用指针之前,始终要确保它不为NULL。
使用NULL指针可以提高代码的可读性和健壮性,有助于避免悬空指针和空指针引发的错误。在编写C程序时,合理地使用NULL指针是一个良好的编程习惯。
指针的算术运算
在C语言中,指针的算术运算允许对指针进行加法、减法和比较操作。这些算术运算使得可以在指针上进行递增和递减操作,以及计算两个指针之间的距离。
下面是关于C语言指针算术运算的详细说明:
1. 指针的加法运算:可以将一个整数值加到指针上,得到一个新的指针。这个整数值表示要移动的元素数量,而不是字节数量。例如,`ptr + 1` 将返回指针 `ptr` 后面一个元素的地址。如果 `ptr` 指向 int 类型的数组,那么 `ptr + 1` 将指向数组中下一个 int 元素的地址。
2. 指针的减法运算:可以将一个整数值从指针中减去,得到一个新的指针。这个整数值表示要向前移动的元素数量。例如,`ptr - 1` 将返回指针 `ptr` 前面一个元素的地址。同样地,如果 `ptr` 指向 int 类型的数组,那么 `ptr - 1` 将指向数组中前一个 int 元素的地址。
3. 指针之间的减法运算:可以计算两个指针之间的元素数量。结果是一个整数类型,表示两个指针之间的元素个数。例如,`ptr2 - ptr1` 将返回指针 `ptr1` 和 `ptr2` 之间的元素个数。
4. 比较运算符:可以使用比较运算符(如 `<`、`>`、`<=`、`>=`、`==`、`!=`)来比较两个指针的关系。这些比较运算符可以用于判断指针是否指向同一块内存区域、指针的相对位置以及指针与NULL之间的关系。
需要注意的是,指针的算术运算应该谨慎使用,以避免越界访问或计算错误的地址。在进行指针算术运算时,应确保指针指向的内存区域是有效的,并且不会超出数组的边界。否则,将导致未定义行为和程序错误。
此外,还要注意指针的类型。指针的算术运算是根据指针所指向的对象类型来计算的。因此,在进行指针算术运算时,需要确保指针的类型与操作对象的类型匹配,以避免错误的计算结果。
总结起来,C语言中的指针算术运算提供了一种方便的方式来在指针上进行递增、递减和比较操作。正确使用指针算术运算可以简化代码,并且在处理数组和数据结构时非常有用。但是,需要谨慎处理指针的边界情况,以确保程序的正确性和健壮性。
#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int *ptr = arr; // 指向数组的第一个元素的指针// 指针的加法运算printf("第一个元素的值:%d\n", *ptr);ptr++; // 移动到下一个元素printf("第二个元素的值:%d\n", *ptr);// 指针的减法运算ptr--; // 移动回第一个元素printf("再次打印第一个元素的值:%d\n", *ptr);// 指针之间的减法运算int *ptr2 = &arr[3]; // 指向数组的第四个元素的指针int elements = ptr2 - ptr; // 计算两个指针之间的元素个数printf("两个指针之间的元素个数:%d\n", elements);// 比较运算符if (ptr == &arr[0]) {printf("ptr指向数组的第一个元素\n");}if (ptr < ptr2) {printf("ptr指向的元素在ptr2指向的元素之前\n");}return 0;
}
输出结果:
第一个元素的值:1
第二个元素的值:2
再次打印第一个元素的值:1
两个指针之间的元素个数:3
ptr指向数组的第一个元素
ptr指向的元素在ptr2指向的元素之前
指向指针的指针
在C语言中,可以使用指向指针的指针(Pointer to Pointer)来间接引用指针。指向指针的指针是一个指针,它存储了另一个指针的地址。通过使用指向指针的指针,我们可以修改指针的值,进而改变所指向的数据。
一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针:
int **var;
下面是一个示例代码,演示了指向指针的指针的使用:
#include <stdio.h>int main() {int value = 10;int *ptr = &value; // 指向value的指针int **ptr2 = &ptr; // 指向ptr的指针printf("value的值:%d\n", value);printf("ptr指向的值:%d\n", *ptr);printf("ptr2指向的值:%d\n", **ptr2);// 修改value的值*ptr = 20;printf("修改后的value的值:%d\n", value);printf("通过ptr2间接修改后的value的值:%d\n", **ptr2);return 0;
}
在上述示例中,我们首先定义了一个整型变量 value,然后定义了指向 value 的指针 ptr,最后定义了指向 ptr 的指针 ptr2。
通过使用 *ptr,我们可以访问和修改 value 的值。而通过使用 **ptr2,我们可以间接地访问和修改 value 的值。
输出结果:
value的值:10
ptr指向的值:10
ptr2指向的值:10
修改后的value的值:20
通过ptr2间接修改后的value的值:20
这个示例展示了指向指针的指针的用法。通过多级间接引用,我们可以在需要时修改指针所指向的数据。指向指针的指针在某些情况下很有用,例如在函数中传递指针的地址,或者在动态内存分配和释放过程中进行操作。
需要注意的是,指向指针的指针可以有多级,但在实际应用中,过多的间接引用可能会导致代码难以理解和维护。因此,在使用指向指针的指针时,应根据实际需求谨慎选择合适的级别。
传递指针给函数
在C语言中,可以将指针作为参数传递给函数。这种方式被称为传递指针给函数(Passing Pointers to Functions),它可以让函数直接修改指针所指向的数据,从而避免了在函数内部进行数据的复制和传递,提高了程序的效率。
下面是一个简单的示例代码,演示了如何将指针作为参数传递给函数:
#include <stdio.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}int main() {int x = 10, y = 20;printf("交换前:x=%d, y=%d\n", x, y);swap(&x, &y);printf("交换后:x=%d, y=%d\n", x, y);return 0;
}
在上述示例中,我们定义了一个 swap 函数,它接收两个整型指针作为参数。在函数内部,我们使用指针间接访问和修改了变量的值,从而实现了变量的交换。
在 main 函数中,我们定义了两个整型变量 x 和 y,并通过 & 运算符获取了它们的地址,并将这些地址作为参数传递给了 swap 函数。在函数执行完毕后,我们可以看到变量的值已经被交换了。
输出结果:
交换前:x=10, y=20
交换后:x=20, y=10
这个示例展示了如何将指针作为参数传递给函数,并在函数内部修改指针所指向的数据。通过使用指针,我们可以避免在函数内部进行数据的复制和传递,从而提高了程序的效率。
需要注意的是,在传递指针给函数时,应该确保指针所指向的数据是有效的,否则可能会导致程序崩溃或者出现不可预期的行为。同时,应该避免在函数内部修改指针本身的值,以免影响到调用函数的代码。
从函数返回指针
在C语言中,可以从函数中返回指针。这种方式被称为从函数返回指针(Returning Pointers from Functions)。通过返回指针,函数可以将动态分配的内存或者已存在的变量的地址传递给调用函数,使得调用函数能够访问和操作该内存或变量。
为了做到这点,必须声明一个返回指针的函数,如下所示:
int * myFunction()
{
.
.
.
}
注意:‘*’ 位置可在中间,也可在两边。
下面是一个简单的示例代码,演示了如何从函数中返回指针:
#include <stdio.h>
#include <stdlib.h>int* createArray(int size) {int* arr = (int*)malloc(size * sizeof(int));for (int i = 0; i < size; i++) {arr[i] = i + 1;}return arr;
}int main() {int size = 5;int* array = createArray(size);printf("数组元素:");for (int i = 0; i < size; i++) {printf("%d ", array[i]);}printf("\n");free(array);return 0;
}
在上述示例中,我们定义了一个 createArray 函数,它接收一个整型参数 size,并返回一个 int 类型的指针。在函数内部,我们使用 malloc 函数动态分配了一个大小为 size 的整型数组,并将数组的首地址赋值给指针 arr。然后,我们使用循环初始化了数组的元素,并最终返回了指针 arr。
在 main 函数中,我们调用了 createArray 函数,并将返回的指针赋值给 array。然后,我们通过遍历指针所指向的数组,打印了数组的元素。最后,我们使用 free 函数释放了动态分配的内存。
输出结果:
数组元素:1 2 3 4 5
这个示例展示了如何从函数中返回指针。通过动态分配内存并返回指针,我们可以在函数外部访问和操作该内存。需要注意的是,在使用完返回的指针后,应该及时释放动态分配的内存,以防止内存泄漏。
另外,还需要注意以下几点:
- 返回指针时,应确保指针所指向的内存在函数返回后仍然有效。例如,不要返回局部变量的地址,因为局部变量的生命周期仅限于函数的执行过程。
- 如果函数无法成功分配内存或者出现其他错误,应该定义一种错误处理机制,例如返回一个特殊的指针值(例如 NULL)来表示错误。
- 在接收返回的指针时,应该进行必要的检查,确保指针不为空再进行后续操作,以避免空指针引发的问题。
总之,通过从函数返回指针,我们可以实现更灵活的内存管理和数据传递方式。但在使用时需要谨慎处理,以确保指针的有效性和正确释放内存。
相关文章:

C语言之指针详解
目录 地址 指针的定义和使用 数组与指针的区别与联系 字符串与指针的用法 C 中的 NULL 指针 指针的算术运算 指向指针的指针 传递指针给函数 从函数返回指针 在学习指针之前,我们先弄清楚一个概念: 地址 地址在计算机内存中是一个唯一的标识符…...

【Java笔记+踩坑】设计模式——原型模式
导航: 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 零、经典的克隆羊问题(复制10只属性相同的羊) 一、传统方案࿱…...
Flutter GetX使用详解
介绍 GetX是一款功能强大且轻量级的Flutter状态管理和路由管理库。它提供了一种简单而强大的方式来构建Flutter应用程序,无需大量的模板代码。GetX不仅提供了状态管理和路由管理,还包括其他实用工具,如国际化和依赖注入。 在本文中…...

【ARM Coresight 系列文章 3.3 - ARM Coresight SWD 协议详细介绍】
文章目录 1.1 SWD 协议框图1.2 读/写时序及命令1.2.1 SWD 时序1.2.2 SWD 命令详情1.3 芯片探测1.3.1 获取芯片 ID1.4 读/写操作1.1 SWD 协议框图 SWD协议可以配置SoC内部几乎所有的寄存器。时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先 HOST 对SW-DP 进行操作…...
作为开发者,可视化开发工具了解一下
你是否为编程世界的各种挑战感到头痛?想要以更高效、简单的方式开发出专业级的项目? JNPF低代码工具正是你苦心寻找的产品!它是一款专为稍微懂一点点编程思想的入门级人员设计的神奇工具,集成了丰富的功能和组件,让你轻…...

Python:实现日历功能
背景 日常生活中,每天都要用到日历,日历成为我们生活中的必需品,那么如何制作日历呢,其实方法有很多,可以直接在excel中制作,也可以手画等等。 学习过编程的朋友,能否想到用Python编写一…...

2.9.C++项目:网络版五子棋对战之业务处理模块的设计
文章目录 一、意义二、功能三、管理(一)客户端请求(二)websocket 四、框架五、完整代码 一、意义 将所有的模块整合在一起,通过网络通信获取到客户端的请求,提供不同的业务处理。 服务器模块,是…...

springboot actuator 常用接口
概述 微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题,而微服务的特点决定了功能模块的部署是分布式的,运行在不同的机器上相互通过服务调用进行交互,业务流会经过多个微服务的处理和传递,在这种框架下࿰…...

知识点滴 - Email地址不区分大小写
电子邮件地址本身对字符大小写不敏感。这意味着实际的电子邮件地址,如 "exampleemail.com",并不区分字母的大小写。无论你输入的是大写字母还是小写字母,它仍然会到达同一个电子邮件账户。例如,如果您的电子邮件地址是 …...

同一个页面同一区域两个el-table在v-if下样式重叠问题
🍉正常情况下在radio切换时两个表格的样式应如下 🍉实际上用v-if显示时会出现以下问题(本该属于时间段相同模块的表格却出现在时间段自定义的表格中) 🍉解决方案: 🍃一、将v-if替换成v-show(…...

ExoPlayer架构详解与源码分析(6)——MediaPeriod
系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…...
【开题报告】基于Spring Boot的课程在线预约系统的设计与实现
1.引言 随着互联网的发展,线上教育和课程培训变得越来越普遍。然而,很多学生在选择课程时面临一些困扰,例如如何找到适合自己的课程,如何与老师进行预约等。因此,设计一个基于Spring Boot的课程在线预约系统具有重要的…...
React Hooks还有哪些常用的用法?
除了之前提到的 useState、useEffect、useContext、useRef、useMemo 和 useCallback,还有一些其他常用的 React Hooks,它们提供了额外的功能和灵活性。以下是其中一些常见的 React Hooks: 1:useReducer:用于在函数组件中管理复杂的状态逻辑,类似于 Redux 的 reducer。 …...

基于Java的学生学籍管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...
Java内部类、匿名内部类、嵌套类详解
CONTENTS 1. 创建内部类2. 内部类到外部类的连接3. 在内部类中生成外部类对象的引用4. 匿名内部类5. 嵌套类6. 接口中的类 1. 创建内部类 创建内部类的方式就是把类定义放在一个包围它的类之中: package com.yyj;public class Parcel1 {class Contests {private i…...

【兔子王赠书第3期】《案例学Python(进阶篇)》
文章目录 前言推荐图书本书特色本书目录本书样章本书读者对象粉丝福利丨评论免费赠书尾声 前言 随着人工智能和大数据的蓬勃发展,Python将会得到越来越多开发者的喜爱和应用。因为Python语法简单,学习速度快,大家可以用更短的时间掌握这门语…...

【C刷题】day6
一、选择题 1、以下叙述中正确的是( ) A: 只能在循环体内和switch语句体内使用break语句 B: 当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并中止循环体的执行 C: continue语句的作用是:在…...
MySQL精髓:如何使用ALL一次找到最大值
题目来自LeetCode 题目 表:Project -------------------- | Column Name | Type | -------------------- | project_id | int | | employee_id | int | -------------------- (project_id, employee_id) 是该表的主键(具有唯一值的列的组合)。 employee_id 是该表…...

安全设备
一.防火墙 5层应用层 防火墙 4层 udp tcp 协议 华为 厂商 华为 h3 1.区域划分 Dmz 停火区 Untrust 不安全区域 Trust 安全区域 防火墙 默认禁止所有 二.Waf Web 应用防火墙 放到web前面 产品 雷池 绿盟 软件 安…...

基于Java的足球赛会管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...