最简单的指针我也不懂

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:05:07
最复杂的汇编指针我是懂的,但最简单的C指针我却不懂。
#include<stdio.h>
main()
{
int i;
int *ip;
ip = &i;(一)
i = 101;(二)
printf("%d,%d\n",i,*ip);结果显示101 101
*ip = 1500;(三)
printf("%d,%d\n",i,*ip);结果显示1500 1500
}
一:明明前面的定义只是星IP,IP都没定义,怎么可以给IP赋值呢?再有,我怎么I放在内存的哪个位置,放在3000H与2013H都是有可能的啊!

二三:为什么输出结果是这样的啊?

C 语言的“形式”逻辑 很乱,对习惯用FORTRAN 及传统语言的人来说很费解。

声明里用的“形式”与语句里的 “形式”就算相同,但 C 语言里它们表达的东西 在概念上 却可能 是不同的,最典型是 指针。

int *ip; 是声明,声明ip是指针,指向整型量,但并未给所指向的整型量分配单元,而是分配了一个存放指针的单元。

ip = &i; 等号右边是计算 整型量 i 的地址,&是求地址运算符
等号左边 ip 是 指针,ip 是存放指针值的单元,现在 存放 i 的地址。

i = 101; 普通的赋值语句,给变量i 赋 101。

*ip = 1500; 给指针ip 指向的整型量 赋值,(不是给指针自己赋指向地址),因为 ip = &i 语句 把 i 的地址 存到 ip 里,ip 指向的整型量地址就是i的地址。

======================
用 float 型,你会好懂些:
float *ip;

声明了 ip 是指针,指向一个 float 型的量。
计算机给 ip 实际上分配了 一个 整型单元,存放它将来要 指向的float 型的数的地址。

无论一个指针指向什么类型的量,计算机给指针分配的是整型单元,用来放将来指向的对象的地址。

int i //是定义整型变量,i是整型变量,而&i是指针变量
int *ip //这是定义指针变量,ip是指针变量,而*ip是整型变量
*和&是相反的两个过程,*是取值,&是取地址,*ip就是取ip中的值,那么ip不就地址即指针了吗。
ip=&i//这就是给ip赋值了啊,就是把存放i的地址即指针赋给ip,这里变量i的地址是随机分配的,想知道的话print ip就可以了。
当然也可以这样赋:ip=2000;

二、ip=&i;//上面说了,这句是将i的地址赋给ip,即ip现在指向存放i的地址,所以说*ip和i的值是一样的,你给i赋值101,那它们俩就都是101了。

三、*ip=1500;//这句等同于i=1500,因