关于指针的详细讲解
时间:2022-07-24
本文章向大家介绍关于指针的详细讲解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
通俗的将指针就是地址,指针变量就是存储地址的变量。
一个简单的指针变量的声明:
int *p;
上述声明p是指向int类型对象的指针变量。
一、取地址运算符:
声明指针变量是为指针留出空间,但是并没有把它指向对象:
int *p;
在使用前初始化p至关重要。
一种初始化指针变量的方法是使用&运算符把某个变量的地址赋给它。
int i,*p;
p=&i;
通过把i的地址赋值给变量p的方法,描述为把p指向i;
Q&A:在声明指针变量的同时对它进行初始化也是可行的:
int i;
int *p=&i;
或者
int i,*p=&i;
二、间接寻址运算符
一旦指针变量指向对象,就可以使用*运算符访问存储在对象中的内容。例如p指向i,那么可以写出显示i的值:
printf("%dn",*p);
Q&A:printf函数显示i的值,而不是i的地址。
只要p指向i,*p就是i的别名。*p不仅拥有和i相同的值,而且对*p的改变也会改变i值。(*p是左值,随意对它赋值是合法的)。
不要把间接寻址运算符用于位初始化的指针变量。
三、指针赋值
C语言允许使用赋值运算符进行指针的复制,前提是两个指针具有相同的类型:
int i,j,*p,*q;
p=&i;//把i的地址复制给p
q=p;//把p的内容(i的地址)复制给q,效果是把q指向了p所指向的地方
注意不要把
q=p;
*q=*p;
这两个搞混了。第一条指针赋值,而第二条不是,举个例子:
p=&i;
q=&j;
i=1;
*q=*p;
赋值语句*q=*p是把p指向的值复制到q指向的对象(变量j)中。
四、指针的运算
int a[10],*p,*q,i;
p=&a[2];
q=p+3;
p+=6;
五、用数组名作为指针
用数组名作为指向数组第一个元素的指针。
int a[10];
*a=9;//等价于a[0]=9;
*(a+1)=12;//等价a[1]=12;
数组名可用指针这一事实使得编写遍历数组的循环更容易。
六、自家封装的一个连接字符串函数
char *concat(const char *s1,const char *s2)
{
char *result;
result = malloc(strlen(s1)+strlen(s2)+1);
if (result == NULL)
exit(EXIT_FAILURE);
strcpy(result,s1);
strcat(result,s2);
return result;
}
注意,函数空间的释放;
- Spring Cloud中Hystrix仪表盘与Turbine集群监控
- 轻量级压力测试工具 - AB
- Spring Cloud中Hystrix的请求合并
- Spring Cloud中Hystrix的请求缓存
- mysql主从复制配置
- Spring Cloud系列勘误
- Spring Cloud Stream使用细节
- Redis3 对集群进行重新分片
- Spring Cloud Stream初窥
- jquery事件绑定性能测试
- Spring Cloud Bus整合Kafka
- 图解Mac下如何安装管理MySQL
- Spring Cloud Bus整合RabbitMQ
- 结合Scikit-learn介绍几种常用的特征选择方法(下)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【python opencv】二维直方图
- 序列检测一定要用状态机?
- 【python opencv】直方图反投影
- 【python opencv】模板匹配
- 【python opencv】霍夫变换
- python动态柱状图图表可视化:历年软科中国大学排行
- 【MSQL数据库】MySQL中的NULL
- sklearn自带的数据集以及生成数据
- elaticserch的索引
- 有效地读取图像,对比opencv、PIL、turbojpeg、lmdb、tfrecords
- 消息队列的使用(kafka举例)
- 类加载过程,双亲委派模型?
- 图卷积网络-多标签分类
- MySQL parttion分区,以及分区和分表的区别
- ThreadPoolExcutor源码分析