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