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]的地址所拥有的值.

C语言指针问题(初学者)
1.概念问题:指针是指存放地址值的变量或常量;指针与一般变量或常量的区别,在于它不直接存储数值,而是存放被存储数值的地址,属于间接存放,所以不少初学者感觉学习困难。比如:int a=2,b,c,*ptr; ptr=&a;表示将指针ptr指向变量a,存放a的地址,假设是2000H,而指针变量ptr本身也要有地址,假...

关于c语言指针的一些问题
如果a 数组名 那么就是正确的 他表示 指针p 指向的单元 内容为 a [0] 3、a 是数组名的时候是正确的 他表示 a[0] = 指针p所指单元的内容。

菜鸟自学C语言,关于指针
这段程序,如果是为了检验swap函数能否正常互换两个整数的话,是没问题的。如果你说出问题,有可能是变量a,b输入时,你漏了中间的逗号(因为你scanf函数的字符串里面是有括号的,请注意)。至于你注释中的"*q1=a"和"q1=&a",是不等价的,前者是“把a中的内容赋给指针q1所指向的内存块”,而后...

c语言指针问题,求解答
首先 函数指针的定义 A、D定义为:A 定义指向函数的指针pf,所指向的函数参数为空,无返回值 D 定义指向函数的指针pf,函数参数为int,char型(不符题意,题目为int,char*),无返回值 B、D的定义为:定义函数pf,函数参数为空,返回类型为void *(void 型指针)单从函数指针的定义可排除BCD。其次...

C语言指针问题(求高人指点啊)
最后一点啦!第一行!看似没错!其实---,事实上c语言的定义不能在一次定义中引用此次定义的其他变量!像你的int a=20;*p,*q=&a;p=q;q=&a,由于a属于此次定义中的变量,所以出错咯!应该分开定义就OK啦!int a=20;int *p,*q=&a;p=q;注意一点int *p=&a;初学者很不明白!不是,*q...

我这C语言代码自学关于指针问题,运行出现这样的问题11 invalid conversi...
指针与变量不能直接赋值,只有(*q)才能和变量进行赋值,并且必须先给指针分配内存空间,所以直接把q=i编程(*q)=i是不行的。有两种该法:include<stdio.h> include"stdlib.h"int main(){ int i,j,k;int *q;q=(int*)malloc(sizeof(int));scanf("%d %d %d",&i,&j,&k);if(i>j)...

C语言指针问题
一、如有定义char y[4]= "321"则表达式 *y+2的值是'5' 。分析:y是字符串数组首元素'3'的地址,*y的值就是字符'3',再加上2,就是字符'5'(也可以说是字符'5'的ASC码值)。二、 如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 'T'。分析:z是二维字符...

C语言中的指针问题到底是怎么回事~
在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的“类型”这个概念分成“指针的类型”和“指针所指向的类型”两个概念,是精通指针的关键点之一。我看了不少书,发现有些写得差的书中,就把...

C语言指针问题
1.这里根本就没有赋值的语句,所以没有复制。(*s)&&(*t)&&(*t++==*s++) 这个条件就是没到s的结束且没到t的结束且*t == *s,就循环,t和s的指针都往后移。2.p是指针数组,就是有两个指针 for(i=0;i<2;i++) p[i]=ch[i];这个就是赋值给p指针,其中p[0] 等于ch二维...

C语言指针问题
就是数组元素首地址。就像上面说的 a[n]取指定下标的元素,其实是C针对数组操作的一个变形形式,它只是语法上对解引用操作的一个变形,你用 *(a+n)效果完全一致。如果lz把我说的这一坨都看了,你的那几个问题应该就清楚了。没事自己可以下鼓捣鼓捣,指针加上强转,什么样的问题都能折腾出来。

相似回答