Auto commit
This commit is contained in:
parent
1f7190eff5
commit
5626077db1
127
2208/C语言/指针.md
Normal file
127
2208/C语言/指针.md
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
### 地址、指针、指针变量
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
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 <stdio.h>
|
||||||
|
|
||||||
|
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 <stdio.h>
|
||||||
|
/*
|
||||||
|
指针与函数
|
||||||
|
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 <stdio.h>
|
||||||
|
/*
|
||||||
|
指针与数组的关系
|
||||||
|
|
||||||
|
指针与一维数组
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### 指针实现一维数组的倒置
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 指针对字符串/数组进行去重
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 指针实现字符串的替换
|
27
2208/C语言/源码/指针-1.c
Normal file
27
2208/C语言/源码/指针-1.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
16
2208/C语言/源码/指针-2.c
Normal file
16
2208/C语言/源码/指针-2.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
26
2208/C语言/源码/指针-3.c
Normal file
26
2208/C语言/源码/指针-3.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
/*
|
||||||
|
指针与函数
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
29
2208/C语言/源码/指针-4.c
Normal file
29
2208/C语言/源码/指针-4.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
/*
|
||||||
|
指针与数组的关系
|
||||||
|
|
||||||
|
指针与一维数组
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user