美文网首页
为有源头活水来-C语言指针

为有源头活水来-C语言指针

作者: 沈Robbie | 来源:发表于2017-06-21 15:49 被阅读0次

C语言呢是大一时候学的,现在回想起来课程大体的内容是对编程能力的培养,学校有OnlineJudge平台,用于平常的做题以及考试,这些题看起来更像是考察逻辑思维能力,我在这一方面的表现平平。整个学期下来,基本语法虽说学到了指针,但是对指针的讲解还是不够多,对指针有种朦朦胧胧的感觉。

指针

取地址

每一个变量都在内存中有个位置,这个位置称为地址,当我们需要知道这个变量的地址时使用"&"可以取到,该变量的地址。示例1:

#include <stdio.h>

int main ()
{
   int  var1;
   char var2[10];

   printf("var1 变量的地址: %x\n", &var1  );
   printf("var2 变量的地址: %x\n", &var2  );

   return 0;
}

结果:

var1 变量的地址: bff5a400
var2 变量的地址: bff5a3f6

什么是指针?

指针是一个变量,存放的是另一个变量的内存地址,星号*用来声明该变量是个指针。示例2:

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;     /* 一个字符型的指针 */

在这个示例中,ip,dp,fp,ch都是指针,它们的数据类型都是代表内存的长的十六进制数,但是指向的变量的数据类型不同,也就是*ip和*dp数据类型不同,一个是int,一个是double。

绕个弯弯

前面示例1中,打印数组的地址,采用了"&var2"的方式:

printf("var2 变量的地址: %x\n", &var2  );

实际上,很久没接触会觉得这不是取地址的地址也就是指向存放var2这个指针的指针,打印数组的地址,这样不就行了:

printf("var2 变量的地址: %x\n", var2  );

结果是一样的:

var2 变量的地址: bff5a3f6

结果是一样,但仔细一想,如果一样何必加个"&"。实际上两者类型不一样,var2指向的是var2[0]的地址,也就是&var2[0],&var2则是代表整个数组的地址,通过对数组名加减操作能看出两者区别:

int arr[5] = { 1, 2, 3, 4, 5 };
printf("%d\n", *arr);//得到数组第一个元素arr[0]
printf("%d\n", *(arr + 1));//得到数组第二个元素arr[1],地址加sizeof(int),如64位下为4
printf("%d\n", *((int*)(&arr + 1)));//加1相当于&arr[5]+1,也相当于地址加了20(4*5),也就是arr[5]所在地址的后面一个地址,得到未定义的值
printf("%d\n", *((int*)(&arr + 1) - 1));//转换成int *类型(或其它类型T),减一操作将会以sizeof(int*)(或sizeof(T))为移动单位,指向5

结果:

1
2
-858993460
5

[(代码转载自:http://www.cnblogs.com/caiminfeng/p/4858032.html)]

相关文章

  • 为有源头活水来-C语言指针

    C语言呢是大一时候学的,现在回想起来课程大体的内容是对编程能力的培养,学校有OnlineJudge平台,用于平常的...

  • C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一。有了指针,C语言就可以抛开所有束...

  • 深入理解C指针

    标签(空格分隔): C语言进阶 本文将会持续更新。。。。 指向指针的指针 在c语言中指针的操作时通过指针变量来实现...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 详解C++指针和引用

    C++是在C语言的基础上发展来的。C++除了有C语言的指针外,还增加一个新的概念——引用,初学者容易把引用和指针混...

  • 计算机基础的考察

    语言语法(以C/C++为例)。 指针(数组),函数指针,操作符运算顺序,const(常指针与指向常量指针),sta...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

  • 数据结构之静态链表

    前人没有C语言,或者说他们使用的语言没有类似C语言的指针功能.那他们是如何实现和描述链表的呢? 通过数组代替指针来...

网友评论

      本文标题:为有源头活水来-C语言指针

      本文链接:https://www.haomeiwen.com/subject/xiszqxtx.html