C语言中的指针笔记
C语言指针
得到变量的地址
可以使用&运算符找到变量保存在内存中的位置
int x = 1;
printf("x的内存地址是"%p\n",&x)
%p格式符将地址以16进制格式输出。
&x将找到变量x的地址。一般我们会使用一个指针变量保存这个地址。
指针变量是一个用来保存存储器地址的变量,当声明指针变量时,需要说明指针所指向的地址中保存的数据的类型:
int *addr_x = &x;
声明一个int类型的指针变量addr_x,&x或者x变量的地址,并保存这个地址。
读取地址的内容
根据存储器的地址读取保存在那里的数据,可以使用*运算符
int v_s = *addr_x
&运算符是接受一个数据,然后获取其内存地址。
*是接收一个地址,然后获取这个数据的值。
这两个运算符正好相反。
改变地址的内容
C语言中的指针变量还可以进行运算,可以使用*运算符。
将指针变量放在赋值运算符左边。
*addr_x = 100;
代码示例
#include<stdio.h>
void go_source_east(int *lat,int *lon){
//(右边*lat)读取lat地址的lat的内容,并改变地址中的内容(左边lat*)。
*lat = *lat-1;
*lon = *lon+1;
}
int main()
{
int latitude =32;
int longitude =-64;
// 通过&来找到这两个变量在内存中的地址
go_source_east(&latitude,&longitude);
printf("停!当前位置是:[%i,%i]\n",latitude,longitude);
return 0;
}
数组变量
数组变量可以用作指针
数组的指针指向的是数组第一个元素。
由此可以得到下面的等式
int d [] ={4,2,3}
d[0]==*d
地址是数字,所以可以进行指针运算,如果找存储器的下一个地址,可以增加指针的值。
d[i]=*(d+i)
数组的索引从0开始,正是为了方便找到元素的地址单元,指针需要加上的那个数字。
同时数组的索引实际表示的是当前元素到第一个元素的偏移量,可不就是0开始么。
代码示例
#include<stdio.h>
int main(){
int d[] ={1,2,3,100};
//以下四种方法相等
printf("%i\n", 3[d]);
//下标运算符:表达式 x[y] 等效于(*((x)+(y)))
printf("%i\n", d[3]);
printf("%i\n", *(d+3));
printf("%i\n", *(3+d));
return 0;
}
C语言中的指针笔记的更多相关文章
- C语言中的指针数组
C语言中的指针数组是什么,像 char *a[]={"ddd","dsidd","lll"}; 这里讲一下注意如果我们使用了a也就是首元素的 ...
- 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
C 语言中的指针和内存泄漏 http://www.ibm.com/developerworks/cn/aix/library/au-toughgame/ 本文讨论了几种在使用动态内存分配时可以避免的陷 ...
- GO语言中的指针
http://www.tizgrape.com/?p=100 Go语言中的指针语法和C++一脉相承,都是用*作为符号,虽然语法上接近,但是实际差异不小. Go使用var定义变量: var v6 *in ...
- C语言中的指针加减偏移量
C语言指针偏移技巧(也是一个要注意的坑) - 陈杰柱的博客 - CSDN博客 https://blog.csdn.net/cjzjolly/article/details/82116772 C语言中 ...
- C 语言中的指针和内存泄漏
引言对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧 ...
- C语言中的指针和内存泄漏
引言 对于任何使用C语言的人,如果问他们C语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但是 ...
- C语言中的指针学习(小黑板)
指针是C语言中的精华所在,也是C语言的危险之在,今天又重现温习了一下C语言,做了一下总结. 欢迎批阅. (1)指针的含义指针的本质也是数据类型,它是指向地址的变量.例如: { int a = 10; ...
- [C]C语言中的指针和内存泄漏几种情况
引言 原文地址:http://www.cnblogs.com/archimedes/p/c-point-memory-leak.html,转载请注明源地址. 对于任何使用C语言的人,如果问他们C语言的 ...
- 论C语言中二级指针和二维数组之间的区别
刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...
随机推荐
- pc端vue 滚动到底部翻页
html: <div class="list" ref="scrollTopList"> <div class="listsmall ...
- JavaScript CryptoJS库 加密与解密
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【charlse】charlse功能
(一)主界面介绍 一.工具导航栏 Charles 顶部为菜单导航栏,菜单导航栏下面为工具导航栏.视图如下图所示: 工具导航栏中提供了几种常用工具: :清除捕获到的所有请求 :红点状态说明正在捕获请 ...
- ubuntu18.04 安装android studio
首先从官网下载android studio:Android Studio (安装前应先安装JDK环境) 得到android-studio-ide-191.5977832-linux.tar.gz 在安 ...
- Python函数Day2
一.函数补充 只有一个参数时,变量用argv 二.动态参数 为了拓展,对于传入的实参数量不固定,需要万能参数,即动态参数 *args **kwargs 在函数定义时,在 *args为位置参数,起聚合的 ...
- 创建第一kubernetes应用以及基本操作(六)
1.创建一个测试用的deployment kubectl run net-test --image=alpine --replicas= sleep 2.查看获取IP情况 [root@linux ~] ...
- Educational Codeforces Round 72 (Rated for Div. 2)-D. Coloring Edges-拓扑排序
Educational Codeforces Round 72 (Rated for Div. 2)-D. Coloring Edges-拓扑排序 [Problem Description] 给你 ...
- java基础(2)---基本语法
一.程序注释 二.HelloWorld 三.关键字 四.常量 五.变量 六.标识符: 七.数据类型 数据类型间的转换: (1)自主转换:不需要明确指出所要转化的类型是什么,而是由java虚拟机自动转化 ...
- C# 中自定义配置
微软在ConfigurationManager类里面为我们提供了AppSetting和ConnectionStrings 两个常用配置, 但是有时候我们需要自定的配置,例如 <image lef ...
- python - pycharm 配置虚拟环境出现的中文命名问题
说一个困扰我很久的问题,当使用 pycharm 配置新的虚拟环境想要与之前的环境隔离的时候,正常的点击 New Project 创建项目时,不勾选 Inherit global site-packag ...