指针基础知识笔记

指针基础知识笔记指针式C语言中的重要概念,也是C语言的一个重要特色,C的精华所在吧。1.指针-内存地址;2.指针变量:定义为,存放指向存储什么数据类型的地址的变量;它的值就是地址; 定义指针变量: 类型名*指针变量名;//类型名就是指向地址上的数据的类型; 例如: char*pa; int*pb;(注意的是):避免访问未初始化的指针; 3.取地址运算符:&获取某个变量的地址;//初始化指针; 例如:(chara;intb); char

大家好,又见面了,我是你们的朋友全栈君。

指针式C语言中的重要概念,也是C语言的一个重要特色,C的精华所在吧。

1.指针-内存地址;
2.指针变量:定义为,存放 指向存储什么数据类型的 地址 的变量;它的值就是地址;
	定义指针变量:
		类型名 *指针变量名;//类型名就是指向地址上的数据 的 类型; 
			例如:
				char *pa;
				int *pb;
 (注意的是):避免访问未初始化的指针;			

3. 取地址运算符:& 获取某个变量的地址;//初始化指针; 
	例如:(char a ;int b);
		char *pc = &a;   
		pb = &b; 
4. 取值运算符:* 访问指针变量指向的数据;
	例如:
		printf("%c,%d\n",*pa,*pb);
		 
 (注意的是):
 	取值运算符和定义指针一样都是使用星号(*); 
	直接访问:通过变量名来访问;
	间接访问:通过指针变量访问; 

5.指针和数组:数组名存储的是数组的第一个元素的地址(数组名就是个指针); 
	定义指向数组第一个元素的指针:
	 	char *p,ar[10];   
	 	p = ar 等价于:p = &ar[0]//a[0]就是第一个元素的值;&取址,取存储这个数据的地址;  //p存放是数组第一个元素的地址 
	指针运算:	p-1 , p+1 //不是地址加一,加上一个sizeof(char),指向数组的 下一个元素	
	用指针定义字符串:
		char *p = "duidui!";
	指针和数组的区别:
		数组名只是个地址,而指针是个左值;
		
6.	指针数组:一个数组,每个数组元素存放一个指针变量;//存储若干个指向指定的数据类型的地址(指针
		int	*pl[5] = {&a,&b,&c,&d,&e};
	用于指向字符指针:
		char *pl[3] = {
			"让编程改变世界",
			"Just do it",
			"One more thing..."
		};
	数组指针:	指向一个数组地址的指针	//指向指针的指针; temp里存的是第一个元素的地址,p2存放的是temp的地址; 
		int (*p2)[5],temp[5] = {1,2,3,4,5};
		p2 = &temp; //之前那个是 p = temp;
	二维数组:int array[4][5] 
		array表示指向包含5个元素的 数组 的 指针,  array 是个指针 指向地址的指针  ,这个地址 的存放数据类型是 五个元素的数组;
		*array = array[0] 是 	array[0][0](这是个值)的地址 ;//是什么  ,第一个数组的第一个元素的地址 
   		*(array+1) = array[1]
		*(array)+1 = &array[0][1];	
		*(*(array)+1) = array[0][1];
		即:
			*(array+i) == array[i];
			*(*(array+i)+i) == array[i][j];
			*(*(*(array+i)+j)+k) == array[i][i][k];

7. void: 通用型指针,任何类型指针都能赋给void//不必要不要用; 
	一旦指定了,就要用强制类型转换;
	例如:
		void *pv;
		int *pq;
		char *pw;
		pv = pq;
		(char *)pv = pw; 
8. NULL: 空指针,不指向任何类型,对NULL解引用是非法的,而野指针不行;//节约了大量的调试时间 
 
9.指向指针的指针:
	int num = 520;
	int *p =#//对p解引用(*p)得到一个整型的值 
	int **pp = &p;
	
	printf("num: %d",num);
  	printf("*p: %d\n",*p);
  	printf("**pp: %d",**pp);

10.指针数组 和 指向指针的指针
	通过指向指针的指针来指向数组指针可 显著提高代码的灵活性和安全性 
		避免重复分配内存,
		方便修改
	char *books[] = {
		"《AAA》"
		"《BBB》"
		"<12321>"
		"asdsad"};
	char **daxie[2];
	char **num;
	num = &books[3];
	daxie[0] = &books[0];
	daxie[1] = &bokks[1];
	
11. 可以用数组指针指向二维数组
	int array[3][4]={
		{0,1,2,3},
		{4,5,6,7},
		{8,9,10,11}};
		
	int (*p)[4];
	p = array;
	int i,j;
	for (i = 0; i < 3; i++)
	{
		for(j = 0; j <4; j++)
		{
			printf("%2d", *(*(p+i)+j));
		}
	}

12.指向常量的指针:
	常量:
		520,'a',3.14;
		#define LVE 520
		#define A 'a'
		#define PI 3.14
	const int lve = 520;
	const int fovr = 1314;
	const char a = 'a';
	const  float pi = 3.14;//再const关键字的修饰下,变量就失去了可修改的特性,也就是变成了“只读” 
	
	const int *pc = &lve; //同样不可修改指向常量的值; 
	pc = &fovr;//但可以修改它的指向; 
	
13.指向非 常量的 常量指针;让指针指向不可变 
	int num = 520;
	int *const p = &num;
	  
14.指向常量的 常量指针:都不能变了 
	const int *const p = &lve;
	
15. 指向 "指向常量的 常量指针" 的指针://换汤不换药 
	const int *const *pp = &p; 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133183.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置「建议收藏」

    LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置「建议收藏」一、负载均衡:必不可少的基础手段LVS作用:实现负载均衡Keepalived作用:监控集群系统中各个服务节点的状态,HAcluster。配置LVS有两种方式:1.通过ipvsadm命令行方式配置2.通过Redhat提供的工具piranha来配置LVS1.1找更多的牛来拉车吧  当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一…

  • mac. navcat 激活码【2022最新】2022.02.19

    (mac. navcat 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • pythoncharm怎么保存_pycharm怎么设置代码自动保存「建议收藏」

    pythoncharm怎么保存_pycharm怎么设置代码自动保存「建议收藏」pycharm一般安装完毕,就是默认是自动保存的,但是……但是….既然是程序,既然是软件,就难免出现bug。也许会有码友出现头天晚上写好的代码,打开一看,第二天白花花一片!!!泪奔有没有最简单的,就是每次编写完毕,习惯按ctrl+s手动保存。但是,提醒你务必检查一下你的设置里面,是不是码友弄好自动保存!步骤如下:菜单File->Settings…->Ap…

  • ESCMScript6(3)Promise对象「建议收藏」

    ESCMScript6(3)Promise对象「建议收藏」1.Promise的含义Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了P

  • 张耀阳[通俗易懂]

    张耀阳[通俗易懂]2006.9.17 18:39500)this.style.width=500;”> 张耀阳——杀出个恶名  在他演过的五十几部电影中,有四十多部他扮演了古惑仔,仅在[古惑仔]系列中,张耀阳就“死去活来,阴魂不散”。“乌鸦”丧命后,他又借尸还魂摇身变做“东兴耀阳”,演反派演的把自己名字也搭进去,这真是连他本人都始料未及的

  • 编辑器 editor_ios 编辑器

    编辑器 editor_ios 编辑器editor.md编辑器使用记录

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号