C语言指针问题(初学者)

2024-11-28 15:53:36
推荐回答(5个)
回答(1):

1.概念问题:指针是指存放地址值的变量或常量;指针与一般变量或常量的区别,在于它不直接存储数值,而是存放被存储数值的地址,属于间接存放,所以不少初学者感觉学习困难。
比如:int a=2,b,c,*ptr; ptr=&a;表示将指针ptr指向变量a,存放a的地址,假设是2000H,而指针变量ptr本身也要有地址,假设是3000H,明显 ptr和&ptr是不相等的,千万不要搞混。常见用法:ptr=&a; 指针ptr指向变量a
b=*ptr; 将ptr所指内容存入b,b=a
c=&ptr; 将ptr地址存入c,c与&a或&b明显不同

2. *问题:*在指针部分有两种用法,一是定义指针变量,比如 char *p;二是表示取指针变量所指的内容,比如char ch,*p; *p=ch;
&问题:&指取变量地址,比如 p=&ch;将指针指向ch,即p的值=ch变量的地址

3.指针与数组问题:数组的名字本身代表该数组的首地址,要区分地址与数值之间的关系,比如char c[10], *p;
(1)p=c;表示指针p指向数组c,相当于p=&c[0];c和&c[0]都是表示首地址
(2)c[0],c[1],...c[9]都是表示数组中每个具体变量的值,前面加&才是其地址,与指针相连时,一般是p=&c[1]形式,只有指向c[0]时,才能省略为p=c

4.还有一些复杂的指针应用,比如指向指针的指针,或者指向函数的指针,那些更复杂,二级考试中很复杂的一般考的不多,建议将基本的学习好;这个东西要靠自己慢慢理解,理解了,其实简单,不理解,很难,呵呵。

写了不少,希望能对你的学习有所帮助,不对的地方,请海涵!

回答(2):

30分钟彻底学会C语言指针

回答(3):

可以理解是相反的关系,&是取地址,而*是取地址里的数,定义char *P ,就是定义了一个指针变量,它是专门用来存地址的,p=&a[2], 就是先取数组第三个元素的地址,然后赋给p,*p=&a[2],不对哦,两边类型不一样,*p是一个数值,就是取指针p地址里面的数,而&a[2]是取第三个元素的地址,所以不能赋值哦。呵呵,指针这个比较复杂,你可以先看一下,谭浩强的C语言书,漫漫就会学会的

回答(4):

C中的指针算是最难的一块了。建议朋友指针和数组一起学习。会更容易些。

回答(5):

看看王爽的<汇编语言>吧.
里面讲的很清楚.
可以这样理解( 个人理解 ),任何一个变量都是一个地址.比如:0X12FF84等等.
以你的题目为例,
(注意:)p是一个地址,这里p=&a[2], 那么p的地址就是a[2]的地址.
(注意:)*p=&a[2]就是p的地址里面的值是a[2]的地址.
(警告:)这里p的地址,p的地址可以是任何一个变量的值.比如:p=&a[2].如果你不给它值,那么他就是个随机的值,瞎鸡B乱指,爱指哪儿就是哪儿.*p就不一样了,*p=&a[2]就是系统给你的一个可以用的地址,里面存的是a[2]的地址所拥有的值.