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

指针*与&有什么关系啊,怎么理解啊,理解不了指针与数组比如说
char c[10] *p
p=&a[2],什么意思啊,还有*p=&a[2],对吗?两者有什么关系
*p=&c,p=&c有什么区别?怎么理解这些玩意啊,妈的,看了一个多星期了还是搞不懂指针与数组有*与&时的读法及理解上的意义?
*p=c好像也对,但是*p不是代表的一个内容吗?c是数组不是指的首地址吗?既然这样左边的*p(内容)与右边的c(地址)怎么能相等呢?望知情者一一解答,谢了,我初学者,已经学指针与数组学了好几天,但就是学不懂,【1】不知道指针什么时候用*与&?【2】还有就是即使用了也不知道语句的意义?求高手帮我一把啊?马上考试二级了
先帮我解答下我提出的问题。然后帮我重点解答【1】【2】谢谢了谢谢了谢谢了

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

写了不少,希望能对你的学习有所帮助,不对的地方,请海涵!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-25

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

第2个回答  2012-03-19
可以理解是相反的关系,&是取地址,而*是取地址里的数,定义char *P ,就是定义了一个指针变量,它是专门用来存地址的,p=&a[2], 就是先取数组第三个元素的地址,然后赋给p,*p=&a[2],不对哦,两边类型不一样,*p是一个数值,就是取指针p地址里面的数,而&a[2]是取第三个元素的地址,所以不能赋值哦。呵呵,指针这个比较复杂,你可以先看一下,谭浩强的C语言书,漫漫就会学会的
第3个回答  2012-03-08
C中的指针算是最难的一块了。建议朋友指针和数组一起学习。会更容易些。
第4个回答  2012-03-08
看看王爽的<汇编语言>吧.
里面讲的很清楚.
可以这样理解( 个人理解 ),任何一个变量都是一个地址.比如: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]的地址所拥有的值.
相似回答