c语言——关于指针问题

请对下面再的关于“&”和“*”的问题进行考虑:
1) 如果已经执行了“pointer_1=&a;”语句,则&*pointer_1是什么含义?
2) *&a含义是什么?
3) (pointer_1)++和pointer_1++的区别?

你首先要明白,指针运算符的作用,我用一言以概之,你在哪里使用都不会错。指针运算符*的作用是求出*后面所指地址里的值。因此只要*后面的变量表示的是一个地址就可以使用*运算符,来求出这个地址中的值,你不用管这个地址的表示形式是怎样的,只要是地址就可以使用*来求出地址中的值。

那么现在就很好理解了
1、&*pointer_1先计算*pointer_1所含的地址的值,然后再计算这个值所在的地址,因此这个语句也就等于&a
2、*&a的意思就更明白了,&a表示的是变量a的地址,那么*&a就表示的是求出&a所表示的地址里的值,也就是a了。
3、(pointer_1)++和pointer_1++的区别?这里是没区别的,你要问的可能是这样的 (*pointer_1)++和pointer_1++的区别?那么第一句是对pointer_1所指向的地址的值加1,也就是对变量a加1,而pointer_1+1表示的是把指针ponter_1所针向的地址偏移1个单位,也就是指向下一个地址。这一个单位要看pointer_1指针是什么类型的,如果是int型,则增加4个字节。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-10
pointer_1=&a表示pointer是一个指向a的指针, 所以&*pointer_1先进行*pointer_1操作, 取出pointer指针所指向内存的内容 ,也就是a, 然后进行&*pointer_1(等价于&a), 取地址操作, 所以&*pointer_1 == pointer

2.*&a先进行 &a操作, 取出a的地址, *&a也就是再取这个地址对应的内存的内容, 也就是a,所以 *&a == a;

3.(pointer_1)++和pointer_1++的区别 :没区别...
第2个回答  2010-03-10
1) *pointer_1为a &*pointer_1为&a 所以&*pointer_1为&a
2)先取a的地址 再根据a的地址找a 返回a
3)没区别 指针可以看做一种整型 ++表示自己加一 指针往后移动

c语言指针的赋值问题
在C语言中,指针的赋值是通过将变量的地址赋给指针变量来实现的。指针的基本概念 在C语言中,指针是一个变量,其特殊之处在于它存储的是其他变量的地址,而不是值本身。指针使我们能够间接地访问和修改变量的值。指针的赋值过程 当我们为指针变量赋值时,实际上是将其指向一个变量的内存地址赋给它。这...

C语言中的指针问题到底是怎么回事~
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。 指针所指向的内存区和指针所指向的...

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语言问题,关于指针的问题
一、比如我们定义一个int型指针变量。int *p=NULL;初值为空。那么当执行while(p);时,只有p==NULL时,while循环才会结束。所以如果我们写while(p);printf。。。;那么只有当p为空时,后面的printf才会执行。否则就一直循环,这样我们就能判断p为空了。同理!p,自然就能判断p不为空了。二、p...

c语言这几道题 关于指针的 望大神解答
1、D选项,*x本身就错误,因为x是int类型,没法使用*操作符。2、A之所以错是因为代码中有一句q=NULL,也就是说q是一个空指针了,你再向里面写东西就错了,而且你在vc6.0中可以试一下,马上会出现一条0xc000 0005的写异常。。3、是的,你不管给它赋值多少都是4的。。就好比一个4平方米的房子...

c语言指针知识点总结
1)指针一定要初始化,否则容易产生野指针(后面会详细说明);2)指针只保存同类型变量的地址,不同类型指针也不要相互赋值;3)只有当两个指针指向同一个数组中的元素时,才能进行指针间的运算和比较操作;4)指针只能进行减法运算,结果为同一个数组中所指元素的下标差值。(2)指针的本质分析 ①指针...

c语言程序指针问题
1、指针赋值带来的内存丢失在C语言中指针之间是可以相互赋值的,但是使用不当可能会造成部分内存的“丢失” ,即这部分内存空间不能再被该任何程序访问。如: main(){float *a, *b;a=(float)malloc( sizeof( float));b=(float)malloc( ...

C语言关于指针的问题*++p与*(p--)
printf("%d ",*++p);\/\/++和*都是从右往左结合两者优先级一样所以和上句话一样*p=pa2]printf("%d ",*(p--));\/\/后-- 也就是先打印*p 在自减, 所以还是打印p[2] p -- p=p-1 *p=a[1]p+=3;p=p+3 所以 *p=a[4]printf("%d %d ",*p,*(a+3)); \/\/a+3 就是a...

浅谈C语言指针的四要素
指针则是C语言中一种指向其他变量或数据的特殊变量。它们允许我们以更灵活的方式操作内存中的数据。指针定义时,先指定类型,如`uchar *sp;` 表示定义了一个指向字符型数据的指针sp。理解并掌握指针的四个要素对于有效利用C语言中的指针至关重要:1. **指针的类型**:指针的类型决定了它所指向的数据...

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

相似回答