指针这块,看了好久才有点头绪,稍微有点理解了。

一、指针申明以及赋值

int *p;

这样就声明了一个int型的指针p,这个p就是指针变量,可能上述的书写方式会混淆我们队指针的理解(*号)

我们可以这样看:

int *  p;

int型指针变量---------------------->p;这个*和p分开的话,也是可以解析的。

然后重点来了,这个指针变量赋值的时候只能接受内存地址,对,是内存地址,并且只能是变量计算后的地址(&符计算的内存地址)

   int  var = ;    /* 实际变量的声明 */
int * ip; /* 指针变量的声明 */ ip = &var; /* 在指针变量中存储 变量var 的地址 */
ip = &; /*基本数据类型求地址会报错*/

也就是说指针变量只能存储(接受)栈内存的地址。

对于内存,你只需要知道计算机的内存被编组为“地址-值”这样的关系对。

二、指针值的计算

上面我们知道对于int * ip来说,这个ip是一个只能存内存地址的指针变量,既然地址对应着值,那么这个值怎么求呢?

还是用 * 号,但是此*号不同于变量声明时候的*号,这个*号是取值符, 取出指针所指向地址的值。

   int  var = ;   /* 实际变量的声明 */
int * ip; /* 指针变量的声明 */ ip = &var; /* 在指针变量中存储 变量var 的地址 */ /* 使用取值符*求得指针变量(地址)对应的值 */
printf("Value of *ip variable: %d\n", *ip ); return ;

对于&,就像之前说的那样,放在变量前面:,是取址符, 任何变量都是放在内存中的, 取址符&就是获得变量在内存中地址。

所以,下面两种写法都是错的:

p = var;        // Error: 指针变量只能存储地址, 给指针赋值其他类型的数据显然不对
*p = &var //左边*p取值之后是个int型数值,而右边是求址符,是一个内存地址,显然不是一个东西

C语言学习之指针的更多相关文章

  1. c语言学习笔记 - 指针和字符串

    前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...

  2. c语言学习笔记 - 指针和数组

    结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...

  3. c语言学习笔记.指针.

    指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型 ...

  4. C语言学习笔记--指针阅读技巧

    1. 指针阅读技巧:右左法则 (1)从最里层的圆括号中未定义的标示符看起 (2)首先往右看,再往左看 (3)遇到圆括号或方括号时可以确定部分类型,并调转方向 (4)重复 2.3 步骤,直到阅读结束 注 ...

  5. C语言学习笔记--指针和数组的关系

    1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...

  6. C语言学习笔记--指针概念

    指针也是一种变量,占有内存空间,用来保存内存地址,在32位系统中指针的占用的内存大小为4个字节 1.*号的意义 (1)在指针声明时,*号表示所声明的变量为指针 (2)在指针使用时,*号表示取指针所指向 ...

  7. C语言学习笔记--指针与字符串

    字符类型 char(character)是一种整数,也是一种特殊的类型:字符.这是因为 ① 用单引号表示的字符字符字面量:‘a’,'1' ②‘’也是一个字符 ③printf和scanf里用%c来输入. ...

  8. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  9. GO语言学习(十五)Go 语言指针

    Go 语言指针 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地 ...

随机推荐

  1. Topic与Queue

    总结自:https://blog.csdn.net/qq_21033663/article/details/52458305 队列(Queue)和主题(Topic)是JMS支持的两种消息传递模型: 1 ...

  2. [BZOJ4566][HAOI2016]找相同子串

    COGS传送门 用SAM重新写了一遍.. 我的方法比较笨,先把两个串连在一起,算出来相同子串个数,同理算出s1和s2的子串个数.作差即可. 至于如何统计子串个数,首先toposort后搞出right集 ...

  3. 20145216《java程序设计》课程总结

    20145216<java程序设计>课程总结 每周读书笔记链接汇总 第一周学习总结 20145216<java程序设计>第一周总结 第二周学习总结 20145216<ja ...

  4. 2009-2010 ACM-ICPC, NEERC, Western Subregional Contest

    2009-2010 ACM-ICPC, NEERC, Western Subregional Contest 排名 A B C D E F G H I J K L X 1 0 1 1 1 0 1 X ...

  5. 20162314 Sortingtest-work after class

    20162314 Sortingtest-work after class Content Data : 90 8 7 56 123 235 9 1 653. Use JDB or IDEA to t ...

  6. Win7下硬盘安装fedora17

    Win7下硬盘安装fedora17 这几天经过很多次的百度和实验,终于成功的在我的x64机子上装上了fedora17,以此分享给大家,希望能给大家帮助. 一.准备工作: 1.工具,因为我们电脑上大部分 ...

  7. 如何使用curl进行网页授权

    答:使用curl的-u选项,使用方法如下 curl -u username URL (会提示输入密码)

  8. LeetCode——Longest Palindromic Subsequence

    1. Question Given a string s, find the longest palindromic subsequence's length in s. You may assume ...

  9. 在centos7上安装部署hadoop2.7.3和spark2.0.0

    一.安装装备 下载安装包: vmware workstations pro 12 三台centos7.1 mini 虚拟机 网络配置NAT网络如下: 二.创建hadoop用户和hadoop用户组 1. ...

  10. Android自定义view-CircleSeekbar

    自定义view练手,效果图如下:实现功能 可设置圆环颜色和线宽及触摸后的颜色和线宽    可设置圆环内圈显示的文本内容及字体大小.颜色    可设置触摸点的图片    可设置触摸的有效范围 源码git ...