对指针的理解

int main(void)

{

  int a;

  int *p;

  int **p1;

  a = 5;

  p = &a;

  p1 = &p;

  printf("\n");

  printf("the address of a is %p\n", &a);

  printf("the value of p is %p and the adress of p is %p\n", p, &p);

  printf("the value of p1 is %p and the address of p1 is %p\n",p1, &p1);

  printf("\n\n");

  printf("a‘s value is %d\n", a);

  printf("a‘s value is %d access by first pointer\n", *p);

  printf("a‘s value is %d access by second pointer\n",*(*p1));

  printf("\n");

}

输出结果如下:

the address of a is 0x7fffd57a181c

the value of p is 0x7fffd57a181c and the adress of p is 0x7fffd57a1808

the value of p1 is 0x7fffd57a1808 and the address of p1 is 0x7fffd57a1810

a‘s value is 5

a‘s value is 5 access by first pointer

a‘s value is 5 access by second pointer

解析:
p = &a;
p = 变量 a的地址 = 0x7fffd57a181c
*p = a的值 = 5  //一级指针

p1 = &p;
p1 = 变量p的地址
*p1 = 变量p的值=a变量的地址
*(*p1) = *(变量p的值)=*(变量a的地址)=5

时间: 2024-08-24 09:49:34

对指针的理解的相关文章

顿悟 - 对指针的理解

接触C语言也快两年了,对指针的理解也一直迷迷糊糊,虽然能用指针解决一些问题,但是对于复杂一点的问题,如两级指针的运用,却感到力不从心,无法做到运用自如,两下子就被搞得晕乎乎的了,究其原因,还是对于指针的理解不深刻导致的. 今天在回顾链表的创建时遇到了一些想不通的情况,于是下了“不到黄河心不死”的决心要把指针弄懂,弄透,终于对指针的理解有了质的提高,发现我以前对指针的理解大错特错了,于是将今天所悟记录下来,方便日后回顾. 如下: typedef struct _node { int data; s

【C语言学习】指针再理解(一)

★内存和地址 内存的基本单位是字节,那么内存就可以按字节进行编址,就是给组成内存的所有连续的字节安排地址.其中一个最恰当的比喻就是房子与门牌号,假设有20间连续的房子,从最左边(或者左右边)开始分配门牌号1~20,给内存中字节分配的地址就相当于门牌号,字节就相当于房间.字节的容量只能存储一个字符.那么,内存是如何存储比字符更大的数据呢,比如:整型数据.浮点型数据? ★更大的内存单元 为了存储更大的数据,就会把两个字节或者跟多的字节合在一起组成更大的内存单元.比如内存可以以"字"为单位来

Delphi指针运用理解

现在是面向对象漫天飞的年代了,大家都在在谈面向对象编程.Java对指针“避而不谈”,C#虽然支持指针运用,但是也淡化处理. 然而,指针还是好完全掌握为妙,省得在开发过程碰钉子,至于对指针的运用在于开发人员的存乎于心,运用得当.指针运用的不好,不要怪开发语言及其机制.下面谈到的是在Delphi中指针的运用,至于其他语言,指针的思想是相通的. 指针是一种数据类型,和编程语言中其它的类型一样,是一种类型的区分,比如 Integer 是带符号的整型,在32位X86机中,是用4个字节表示,而指针也是用4个

说说对C语言指针的理解

指针困扰了无数学习编程的人,或许你的老师会告诉你,指针比较难学. 然而,不要被吓到,本宝宝就是当时被老师的话唬住所以学习指针那章的时候都没心情听课.(说得像讲别的内容时我听了似的,just kidding) 导致了学习链表的时候各种卧槽. *************************** 基本介绍 ************************** 程序中数据的使用往往是以变量的形式出现,每个变量都对应若干存储单元,变量的值存储在存储单元中,通过对变量的引用和赋值就可以使用或修改存储在存

JavaScript——对this指针的理解

在我们声明一个函数时,每个函数除了有定义时的parameters(形参),自身还会有额外的两个参数,一个是this,一个是arguments(实参).arguments就是函数实际接受到的参数,是一个类数组.arguments我只做个简略的介绍,重点我们放在this指针上. 在面向对象变成中,this十分重要,它的值取决于调用的模式.而在JavaScript中,一共有4中调用模式:方法调用模式.函数调用模式.构造函数调用模式.apply调用模式. 方法调用模式 当一个函数是作为一个对象的属性时,

对于C语言中数组名是指针的理解

我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3,4}; for(int i=0;i<4;i++) {  cout<<*(a+i);//*(a+i)和a[i]是等价的.  cout<<endl; } return 0;} 但是看下面这个代码 #include<iostream>using namespace std;

C/C++学习笔记----指针的理解

指针是C/C++编程中的重要概念之一,也是最容易产生困惑并导致程序出错的问题之一.利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯:指针能够灵活的操作内存,合理的操作内存能够使程序更高效. 1.指针的概念 本质上讲指针也是一种变量,普通的变量包含的是实际的数据,而指针变量包含的是内存中的一块地址,这块地址指向某个变量或者函数,指针就是地址.指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据. 2.指针的内容 指针的内容包含4部分

c语言函数指针的理解与使用

转载:http://www.cnblogs.com/haore147/p/3647262.html 1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2); 看看上面三个表达式分别是什么意思? C)这很容易,fun3是函数名,p1,p2

如何保存指针地址 理解指针的指针

有这样一个问题就是如何使用一个整数保存一个结构体或类以及其他类型的指针,这种需求在不同语言之间调用是存在的,例如有一个结构体A: struct A { char item1; int item2 }; 需要使用一个整数b,需要用b保存这个结构体指针的地址(struct A* a = new A),使得b的值就是a的指向的地址,你可能会想直接b = a就可以了,但是编译器都不会答应.因为类型不同,一个是整数一个是指向struct A的指针. 正确的方式如下: unsigned int b = 0;

Go语言中地址传递及指针的理解

在学习指针时遇到一个问题,在网上贴出后,得到很多前辈的指导和耐心解答,在此表示感谢,因此整理了此篇文章. 第一次实验,代码如下: type Student struct { Name string } func remove(stu *Student) { fmt.Printf("2----%v\n", stu) stu = nil fmt.Printf("3----%v\n", stu) } func main() { stu := &Student{&q