阿涛不吃辣 1141407586 发表了文章 • 3 个评论 • 283 次浏览 • 2018-08-07 16:04
• 来自相关话题
我是一名完全完全编程零基础的人,到现在还是个菜鸟。
摘抄一段C Primer Plus的内容:
指针(pointer)
指针?什么是指针?从根本上看,指针是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int类型的值是整数,指针变量的值是地址。
好了,这样看来指针就是一个变量,不过这个变量的类型比较特殊,是地址。那么我们怎么理解这个值为地址的变量呢?我来说说我的理解!
$(document).ready(function() {$('pre code').each(function(i, block) { hljs.highlightBlock( block); }); });#include
int main(){
int number = 1;
int * ptr_number = NULL;
ptr_number = &number;
printf("int类型的number的值是 %d,他在内存中的地址是 %x\n", number, &number);
printf("指针ptr_number指向的地址是%p,该地址的值是%d",ptr_number,*ptr_number);
return 0;
}就这,我在云课堂看蒜头老师讲的时候也能理解,但是始终是记不住,苦思冥想到底应该怎么去理解这个指针才能更加的牢固呢?
很长一段时间我都对指针很恐惧。直到有一天我打开书,希望在书中寻找答案时。我发现了牢记指针的方法。要不说“书中自有黄金屋,书中自有颜如玉”呢!
我是一个不是经常看书的人。一般打开书我都是带着疑问去看的,所以我打开我的书本,在目录中寻找有关于指针的介绍,很快我就找到了,C Primer Plus(第六版)的269页就是指针的介绍。就在这时,我脑海里就在想“为什么我看到目录就知道指针介绍在那一页?”
因为上面写了嘛,指针简介 ------------ 269,对呀指针何尝不是类似目录这样的呢?把一本书想象成全部的内存空间。书里有页码、有书页,书页上有字。
没错,我们可以进行这样的联想,现在有一本书(相当于一块内存),我们先 int i = 6,这个操作可以暂时看做我们闭着眼睛随意的打开了一页书,在书上写上了大大的 i 并在他下面写了一个 6 (6是铅笔写的,能改) ,不管你在那一页写的这个 6 ,肯定是有对应的页码的没错吧,那这个页码我们就说成是变量 i 在内存里的地址。假设是第1321页(是假设),如果我们先看看这个闭着眼翻开的是第几页怎么做呢?这时候就要用到 & 符号了,这个符号就是用来取地址的(你要看页码那不就是取地址嘛)。
地址运算符: &
一般注解:
后跟一个变量名时,&给出该变量的地址。
示例:
&num 表示变量 num 的地址
那么取谁的地址呢,肯定是 i 呀(哎呀?哎啊?),&i 这个意思就是我要你的地址(霸不霸气?)这样我们就能找到 i 所在的地方了。说了一大堆,还是没讲指针啊!是啊,那我们再来 int * ptr_i = &i (int是我要指向的变量的类型,可以说是指瘦的人就用瘦纸,指胖的人就就用胖纸,哈哈!)
地址运算符: *
一般注解:
后跟一个指针名或地址是,*给出储存在指针指向地址上的值
示例:
num = 22;
ptr = # //指向 num 的指针
ab = *ptr; //把 ptr 指向的地址上的值赋给ab
最后就是把 22 赋值给了 ab。
这个ptr_i是什么?是我给他取的名字啦,你也可以取其他的名字。再来说说=号后面发生了什么。这一步操作我理解为,还是先闭上眼,翻开任意一页,写上一个大大的ptr_i,然后重点来了,接下来我们睁开眼找到 i 的地址或者理解成 i 的页码(&i 不就是要了 i 的地址来嘛),把他写在了ptr_i下(1321,这是假设的哟)。好了这一步我们就干了这些事!
咱们在来说说这个 ptr_i 。这个上面咱们已经说了,是一个指针。这个变量啊,他只放内存地址,别的一概不能放(不信你自己放放看,编译器都看不下去),而且这个内存地址一定要是取来的。
最后再啰嗦几句,指针也是有地址的,就像是你在把任意一页写成指针类型然后他指向某个值,这个任意一页也是有页码的,所以说如果想通过指针的地址来访问原指针指向的空间的时候,就应该在定义的时候 **ptr_ 就是多加一个地址运算符,说明这是一个指向指针的指针。访问时也需要两个 ** 。再多一句嘴,指向指针的指针也是有地址的,指几次就加几个 * 号运算符,注意,访问原指针指向空间时,定义时有几个 * 号运算符写几个!
以上纯属个人理解,写这个也是为了加深自己对C语言指针的理解。还请各位老师多多指正!手动@蒜头徐老师@老九学堂老师@老九君 查看全部
我是一名完全完全编程零基础的人,到现在还是个菜鸟。
摘抄一段C Primer Plus的内容:
指针(pointer)
指针?什么是指针?从根本上看,指针是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int类型的值是整数,指针变量的值是地址。
好了,这样看来指针就是一个变量,不过这个变量的类型比较特殊,是地址。那么我们怎么理解这个值为地址的变量呢?我来说说我的理解!
#include
int main(){
int number = 1;
int * ptr_number = NULL;
ptr_number = &number;
printf("int类型的number的值是 %d,他在内存中的地址是 %x\n", number, &number);
printf("指针ptr_number指向的地址是%p,该地址的值是%d",ptr_number,*ptr_number);
return 0;
}就这,我在云课堂看蒜头老师讲的时候也能理解,但是始终是记不住,苦思冥想到底应该怎么去理解这个指针才能更加的牢固呢?
很长一段时间我都对指针很恐惧。直到有一天我打开书,希望在书中寻找答案时。我发现了牢记指针的方法。要不说“书中自有黄金屋,书中自有颜如玉”呢!
我是一个不是经常看书的人。一般打开书我都是带着疑问去看的,所以我打开我的书本,在目录中寻找有关于指针的介绍,很快我就找到了,C Primer Plus(第六版)的269页就是指针的介绍。就在这时,我脑海里就在想“为什么我看到目录就知道指针介绍在那一页?”
因为上面写了嘛,指针简介 ------------ 269,对呀指针何尝不是类似目录这样的呢?把一本书想象成全部的内存空间。书里有页码、有书页,书页上有字。
没错,我们可以进行这样的联想,现在有一本书(相当于一块内存),我们先 int i = 6,这个操作可以暂时看做我们闭着眼睛随意的打开了一页书,在书上写上了大大的 i 并在他下面写了一个 6 (6是铅笔写的,能改) ,不管你在那一页写的这个 6 ,肯定是有对应的页码的没错吧,那这个页码我们就说成是变量 i 在内存里的地址。假设是第1321页(是假设),如果我们先看看这个闭着眼翻开的是第几页怎么做呢?这时候就要用到 & 符号了,这个符号就是用来取地址的(你要看页码那不就是取地址嘛)。
地址运算符: &
一般注解:
后跟一个变量名时,&给出该变量的地址。
示例:
&num 表示变量 num 的地址
那么取谁的地址呢,肯定是 i 呀(哎呀?哎啊?),&i 这个意思就是我要你的地址(霸不霸气?)这样我们就能找到 i 所在的地方了。说了一大堆,还是没讲指针啊!是啊,那我们再来 int * ptr_i = &i (int是我要指向的变量的类型,可以说是指瘦的人就用瘦纸,指胖的人就就用胖纸,哈哈!)
地址运算符: *
一般注解:
后跟一个指针名或地址是,*给出储存在指针指向地址上的值
示例:
num = 22;
ptr = # //指向 num 的指针
ab = *ptr; //把 ptr 指向的地址上的值赋给ab
最后就是把 22 赋值给了 ab。
这个ptr_i是什么?是我给他取的名字啦,你也可以取其他的名字。再来说说=号后面发生了什么。这一步操作我理解为,还是先闭上眼,翻开任意一页,写上一个大大的ptr_i,然后重点来了,接下来我们睁开眼找到 i 的地址或者理解成 i 的页码(&i 不就是要了 i 的地址来嘛),把他写在了ptr_i下(1321,这是假设的哟)。好了这一步我们就干了这些事!
咱们在来说说这个 ptr_i 。这个上面咱们已经说了,是一个指针。这个变量啊,他只放内存地址,别的一概不能放(不信你自己放放看,编译器都看不下去),而且这个内存地址一定要是取来的。
最后再啰嗦几句,指针也是有地址的,就像是你在把任意一页写成指针类型然后他指向某个值,这个任意一页也是有页码的,所以说如果想通过指针的地址来访问原指针指向的空间的时候,就应该在定义的时候 **ptr_ 就是多加一个地址运算符,说明这是一个指向指针的指针。访问时也需要两个 ** 。再多一句嘴,指向指针的指针也是有地址的,指几次就加几个 * 号运算符,注意,访问原指针指向空间时,定义时有几个 * 号运算符写几个!
以上纯属个人理解,写这个也是为了加深自己对C语言指针的理解。还请各位老师多多指正!手动@蒜头徐老师@老九学堂老师@老九君