IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言-----指针 -> 正文阅读

[C++知识库]C语言-----指针

  1. 什么是指针

? ? ? 每一个变量都有一个具体的地址,地址指向变量单元,因此将地址形象化为指针,意思是通过指针找到地址的内存单元。

? ? ? 2.指针的类型

根据指针的不同类型,指针有以下情况

//定义指针变量
 类型名 * 指针变量名


int*
char*
double*   ........
void*  类型的指针  可以接受任意类型的地址
但是该类型不能进行解引用操作,不能+-整数

3.指针打印一维数组?

#include<stdio.h>
int main(){
	int a[10]={0,1,2,3,4,5,6,7,8,9};
	int *p=a;           //指向数组 
	int i=0;
	for(i=0;i<10;i++){
		//一维数组打印的两种形式 
		printf("%d",p[i]);
	    printf("%d",*(p+i));
	}
	
	return 0;
}

4.数组指针

数组指针
int (*p)[10];-------数组指针
p先于*结合,说明p是一个指针,接着指向一个大小为10的数组,所以p是一个数组指针
ps:[]的优先级高于*,所以加上()先让p与*结合

指针数组
int *p[10]----------指针数组----用于存放地址

#include<stdio.h>
int main(){
	int a=10;
	int b=20;
	int c=30;
	int* arr[3]={&a,&b,&c};//数组指针
	int i=0;
	for(i=0;i<3;i++){
		printf("%p ",arr[i]);    //不解引用,则打印元素的地址 
		printf("%d ",*(arr[i]));
	} 
	
	return 0;
}

5.函数指针(函数指针的数组)

Ps:与数组不同,函数在存储中都是以地址的形式存放的,因此可以不用&

#include<stdio.h>
void menu(){
	printf("*********************\n");
	printf("*** 1.add     2.sub**\n");
	printf("****3.mul     0.exit*\n");
	printf("*********************\n");

}
int add(int x,int y){
	
	return x+y;
}
int sub(int x,int y){
	
	return x-y;
}
int mul(int x,int y){
	
	return x*y;
}
int main(){
	int input;
	
	int(*parr[5])(int, int)={0,add,sub,mul};//定义指针数组 
	//有无 & 并不重要,因为函数在数组中的存储形式就是以地址存储的 
	int x,y;
	
	do{
		menu();
		printf("choice:");
		scanf("%d",&input);
		if(input>=1 && input<=3)
		{
		    printf("please write two number:");
		    scanf("%d %d",&x,&y);
		    
		    int ret=parr[input](x,y);// 调用函数 or (*parr[input])(x,y)
		    
		    printf("%d\n",ret);
		}
		else if(input==0){
			printf("exit\n");
		}
		else{
			printf("trouble choice\n");
		}
		
		
		
		
	}while(input);/*do...while语句是先执行一次之后再执行判断,判断的值为真时,继续执行do的内容,如果判断的值为假,就不再执行。
                   值为真的意思是值while()括号中的表达式的最终的值为非零值即为真,如果为零,则表示为假。*/ 
	
	return 0;
}

? 2.指向函数数组的指针

int(*p)(int,int)                 函数指针
int(*parr[])(int,int)            函数指针的数组
int(*(*pparr)[])(int,int)=&parr  指向函数指针数组的指针
//pparr是一个数组指针,类型为  int(*)(int,int)

ps:特殊类型的函数-------qsort 函数? 对任意类型的数据排序(升序)

qsort(arr,sz,sizeof(arr[0]),cmp_int)
参数意义
第一个参数:待排序数组的首元素地址
第二个参数:待排序数组的元素个数
第三个参数:待排序数组的每个元素大小--单位是字节
第四个参数:是函数指针,比较两个元素所用函数的地址(自己实现)
            函数指针的两个参数:待比较的两个元素的地址(const void*e1,const void*e2)
#include<stdio.h>
int cmp_int(const void*e1,const void*e2){//两个整形指针,指向两个整形值 
	//compare int  比较两个整形值
	return *(int*)e1-*(int*)e2;     //强制类型转换,转换成int类型
	                                //compare函数的返回值只有三种:>0,<0,=0 
	 
}
void test1(){
	int arr[10]={9,8,7,6,5,4,3,2,1,0};
	int sz=sizeof(arr)/sizeof(arr[0]);//求解一个数组元素的个数 
	qsort(arr,sz,sizeof(arr[0]),cmp_int);//对qsort函数传参 ,第四个为一个compare函数 
	int i=0;
	for(i=0;i<sz;i++){
		printf("%d",arr[i]);
	} 
	
}
int main(){
	test1();
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:40:26  更:2021-10-07 13:41:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:57:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码