From 5626077db16ec75e0b896fe61c239b055abec17a Mon Sep 17 00:00:00 2001 From: smallkun Date: Thu, 6 Mar 2025 17:37:07 +0800 Subject: [PATCH] Auto commit --- 2208/C语言/指针.md | 127 +++++++++++++++++++++++++++++++++++++++ 2208/C语言/源码/指针-1.c | 27 +++++++++ 2208/C语言/源码/指针-2.c | 16 +++++ 2208/C语言/源码/指针-3.c | 26 ++++++++ 2208/C语言/源码/指针-4.c | 29 +++++++++ 5 files changed, 225 insertions(+) create mode 100644 2208/C语言/指针.md create mode 100644 2208/C语言/源码/指针-1.c create mode 100644 2208/C语言/源码/指针-2.c create mode 100644 2208/C语言/源码/指针-3.c create mode 100644 2208/C语言/源码/指针-4.c diff --git a/2208/C语言/指针.md b/2208/C语言/指针.md new file mode 100644 index 0000000..5431163 --- /dev/null +++ b/2208/C语言/指针.md @@ -0,0 +1,127 @@ +### 地址、指针、指针变量 + +```c +#include + +int main(){ + int a = 1; + int* p;//p指针变量 可以用来存储整型变量的地址 + double d = .3; + //数据类型 变量名; + //数据类型* 变量名; + //&取地址符 + printf("&a=%d\n", &a); + printf("&d=%d\n", &d); + //1.使用指针变量存起来 + p = &a; + printf("p=%d\n", p); + //间接访问符 * + //*p <=> a + *p = 10; + printf("*p=%d\n", *p); + printf("a=%d\n", a); + + void* jk; + jk = &a; + printf("%d\n", *(int *)jk); + + return 0; +} + +``` + +### 指针与二级指针 + +```c +#include + +int main(){ + int a = 1; + int *p;//一级指针 可以指向一个整型变量的地址 + int **q; //二级指针 可以指向一个整型指针变量的地址 + p = &a;//a的地址 + q = &p;//p的地址 + + printf("a=%d\n", a); + printf("*p=%d\n", *p);//*p <=> a + printf("**q=%d\n", **q);//*q <=> p **q <=> a + + return 0; +} + +``` + +### 指针作为函数形参 + +```c +#include +/* +指针与函数 +1.形参是指针变量 +2.返回值是指针变量 +*/ +//编写一个函数,传入两个整数/地址,将两个数的值交换 +//函数在调用过程中 +void swap(int* a, int* b){//值传递 + int t; + t = *a; + *a = *b; + *b = t;//使用中间变量交换两个变量的值 + printf("swap: %d %d\n", *a, *b); +} + +int main(){ + int a, b; + a = 1; + b = 2; + swap(&a, &b); + printf("main: %d %d\n", a, b); + + return 0; +} + +``` + +### 指针与一维数组的关系 + +```c +#include +/* + 指针与数组的关系 + + 指针与一维数组 +*/ +int main(){ + + int nums[] = {1, 2, 3, 4, 5}; + //数组在内存中是连续存储 指针变量运算后会得到下一个/前一个 + //nums是一个指针 指向自己这个数组的第一个元素 + //nums[下标] <=> *(nums+下标) + //C语言中只有 *(nums+下标)写法 + //编译器会将 nums[下标]翻译成上面这种 + int *p; + p = nums;//nums、p都可以指向该数组的第一个元素 + //p可以进行赋值运算 但是 nums不行 因为他只是一个虚拟的指针 只能使用* + printf("%d\n", *nums); + printf("%d\n", *(nums+1)); + printf("%d\n", *p++);//1 + printf("%d\n", *p++);//2 + printf("%d\n", *p++);//3 + printf("%d\n", *p++);//4 + printf("%d\n", *p);//5 + + + return 0; +} + +``` + +### 指针实现一维数组的倒置 + + + +### 指针对字符串/数组进行去重 + + + +### 指针实现字符串的替换 \ No newline at end of file diff --git a/2208/C语言/源码/指针-1.c b/2208/C语言/源码/指针-1.c new file mode 100644 index 0000000..b0c94c0 --- /dev/null +++ b/2208/C语言/源码/指针-1.c @@ -0,0 +1,27 @@ +#include + +int main(){ + int a = 1; + int* p;//pָ 洢ͱĵַ + double d = .3; + // ; + //* ; + //&ȡַ + printf("&a=%d\n", &a); + printf("&d=%d\n", &d); + //1.ʹָ + p = &a; + printf("p=%d\n", p); + //ӷʷ * + //*p <=> a + *p = 10; + printf("*p=%d\n", *p); + printf("a=%d\n", a); + + void* jk; + jk = &a; + printf("%d\n", *(int *)jk); + + return 0; +} + diff --git a/2208/C语言/源码/指针-2.c b/2208/C语言/源码/指针-2.c new file mode 100644 index 0000000..e20c870 --- /dev/null +++ b/2208/C语言/源码/指针-2.c @@ -0,0 +1,16 @@ +#include + +int main(){ + int a = 1; + int *p;//һָ ָһͱĵַ + int **q; //ָ ָһָĵַ + p = &a;//aĵַ + q = &p;//pĵַ + + printf("a=%d\n", a); + printf("*p=%d\n", *p);//*p <=> a + printf("**q=%d\n", **q);//*q <=> p **q <=> a + + return 0; +} + diff --git a/2208/C语言/源码/指针-3.c b/2208/C语言/源码/指针-3.c new file mode 100644 index 0000000..44e0409 --- /dev/null +++ b/2208/C语言/源码/指针-3.c @@ -0,0 +1,26 @@ +#include +/* +ָ뺯 +1.βָ +2.ֵָ +*/ +//дһ/ֵַ +//ڵù +void swap(int* a, int* b){//ֵ + int t; + t = *a; + *a = *b; + *b = t;//ʹмֵ + printf("swap: %d %d\n", *a, *b); +} + +int main(){ + int a, b; + a = 1; + b = 2; + swap(&a, &b); + printf("main: %d %d\n", a, b); + + return 0; +} + diff --git a/2208/C语言/源码/指针-4.c b/2208/C语言/源码/指针-4.c new file mode 100644 index 0000000..d5c5c9a --- /dev/null +++ b/2208/C语言/源码/指针-4.c @@ -0,0 +1,29 @@ +#include +/* + ָĹϵ + + ָһά +*/ +int main(){ + + int nums[] = {1, 2, 3, 4, 5}; + //ڴ洢 ָõһ/ǰһ + //numsһָ ָԼĵһԪ + //nums[±] <=> *(nums+±) + //Cֻ *(nums+±)д + //Ὣ nums[±] + int *p; + p = nums;//numspָĵһԪ + //pԽиֵ nums Ϊֻһָ ֻʹ* + printf("%d\n", *nums); + printf("%d\n", *(nums+1)); + printf("%d\n", *p++);//1 + printf("%d\n", *p++);//2 + printf("%d\n", *p++);//3 + printf("%d\n", *p++);//4 + printf("%d\n", *p);//5 + + + return 0; +} +