2025-03-06 17:37:07 +08:00

2.3 KiB

地址、指针、指针变量

#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;
}

指针与二级指针

#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;
}

指针作为函数形参

#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;
}

指针与一维数组的关系

#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;
}

指针实现一维数组的倒置

指针对字符串/数组进行去重

指针实现字符串的替换