c指针

- 地址与值的关系

举例:
图中表明了计算机中内存的存在形式,矩形框上面的整数为地址编号(内存完成编号)。这样的编号对于程序设计来说显得十分不变。因此,指针诞生了。


计算机中的内存形式.png

高级语言的特点就是通过变量来访问内存位置。将以上这张图中的地址位置号用变量替换后如下图。


用变量替代地址位置.png
值得注意的是,地址变量与内存之间的关联并不是有硬件实现,而是由编译器完成这个操作。硬件通过地址访问内存。
int a =112 , b =-1 ;
float c = 3.14;
int *d = &a; 
int *e = &c;

但是,图中地址c中的值并不是float,而是int。所以不能简单地通过地址中的值来判断程序中变量的值,而应该从程序中判断这个内存对应的值和类型。
另外,操作符&表针初始化操作。如*d = &a,表示为变量a的地址为d,也就是编号为100

- 定义指针操作符——&

值得注意的是,d,e被声明为指针,并不会改变指针对应的值的操作方式:变量的值就是分配给这个变量对应的内存中的值。即地址100(d),108(e)中的值为多少取决于a,c
另外,&不能位于=左边。

  • 间接访问操作符——*
    若想访问a,c,除了直接使用变量(直接访问)a,c外,还可以用间接访问方式*d,*e.
    间接访问过程.png
    *Note:指针一个整数值
- 未初始化和非法指针

例如:

int *a;
*a = 123;

这样做的意图为:声明一个指针变量,往指针变量对应的内存中存放123,但是!存在编号多少的内存呢?这就不得而知了。
如果变量为静态的,这被初始化为0;如果变量是自动的,则不会被初始化。当执行程序时,这种做法可能会随机访问到一些不该访问的内存(如程序中其他变量对应的地址)。为了防止这种间接访问方式造成不可预知的错误,所示使用这种方式前,一定要确保这个变量之前被初始化了。
正确的方式:

int i=123;
*a = &i;

另一种正确的方式:
*&a=123;
&操作符产生变量a的地址,*操作符表示引用变量a的地址,则整个表达式的意义为——a=123

- 指针表达式

以下面的代码为例。

char ch = 'a' ;
char *cp = &ch ;

——变量ch的地址。

1.png
——指针cp
2.png
——指针变量cp的地址
3.png
——*cp得到变量ch的值
4.png
——*的优先级高于+,所以*p+1表示ch+1'a'+1
5.png
——*(cp+1)得到下一个第一的值
6.png
——指向下一个地址
7.png
——首先保存当前地址,再指向下一个地址
8.png
——间接访问cp+1中的值
9.png
——++操作符首先产生cp的一个拷贝,然后再++操作符增加cp的值,最后在cp的拷贝上执行操作(++操作符的优先级高于*
10.png
——因为两个操作符的结合方向都是从右往左,故执行ch+1
11.png
——首先间接访问,然后自增,但ch仍然是原来的值
13.png
——ch自增
14.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一...
    xx_cc阅读 3,689评论 11 39
  • 整理自计蒜客-CS 112: C++ 程序设计 指针是什么 指针是一个变量,其储存的是值的地址,而不是值本身。指针...
    埠默笙声阅读 695评论 0 3
  • CPU 处理的数据保存在内存中。而内存又是分成一个个单元,这些单元是顺序排列,每个单元都有一个称为内存地址的编号,...
    2010jing阅读 475评论 0 2
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,423评论 3 44
  • 秋天的颜色好漂亮呀,我想要飞得更高! 听说它们会出油,让我瞧一瞧!快看我的纸,真的有油哎! 我们一起和树叶做手工吧...
    33支玫瑰阅读 201评论 0 0