C语言的一个指针问题。。

#include<stdio.h>
void main()
{
char *p="abcdefgh",*r;
long *q;
q=(long*)p;
q++;
r=(char*)q;
printf("%s\n",r);
}
输出结果为efgh 谁说明下 q=(long*)q 再执行q++ 为什么地址值增加了4?

指针做加法和减法是按其指向的类型来的,char*加1是往后移动一个char那么长的位置,long*加1是往后一定一个整型那么长的位置,这里4个char才有一个long那么长(具体你可以用sizeof输出看),所以q是long*,q++往后移动了4个char,应该指向e的位置
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-12-26
q经过q=(long*)p强制类型转换后,q指向p所指向的内存块中的a,因为q是long 型4位指针,只能看到abcd四位,所以q++;后q指向了e,并且看到efgh四位,再经过强制类型转换,r也指向e,所以结果就是efgh

C语言指针的一个问题
(1) 第一个框里的代码 short* temp = *p1; 等价于下面的两条语句:short* temp;temp = *p1;所以,后面 p2=temp;和上面是一致的, 没错.(2)第二个框里的代码 没错, 指针就一个该指向指针, 但是你这里赋值一个值.这种做法是错误的, 不过对C语言来说, "错的"的意思是"不能保证正确", ...

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

一个C语言指针问题。求大佬解答?
在这个程序中,我们首先提示用户输入方阵的尺寸,然后输入方阵的元素。接着,我们通过遍历方阵的每一行,并使用指针指向每行对应列的元素,来求出方阵对角线元素之和。最后,我们输出结果。程序的输出示例如下:include <stdio.h> int main(){ \/\/ 方阵的尺寸 int n;printf("Enter the size of the m...

C语言关于指针的一题。
{ int a[]={2,4,6},*prt=&a[0],x=8,y,z; \/*定义整形数组a,把2、4、6依次存入数组a的前三个地址 中,定义一个整形指针prt,并把数组a中首地址的值赋值给 prt指向的地址中*\/ for(y=0;y<3;y++)z=(*(prt+y)<x)?*(prt+y):x; \/\/把prt指向的值与x进行比较,把小的...

关于C语言指针的一个问题?
这里&p的地址是不会变的,不是打印不出来是没到打印那个语句程序已经崩溃退出了。图中1处指针p没有初始化,它没有指向任何内存单元不能进行图中2处的赋值写入操作,这里会程序崩溃退出。

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

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

C语言指针问题
MAT”首元素字符'M'的地址,再加上2,就是字符'T'的地址,再取值,得到的就是字符'T'。三、如有定义char y[4]="321",*py=&y[0],则表达式*(py+2) 的值是'1' 。解析:py是y(0) 的地址,py+2是地址加2,就等于y(2) 的地址了,再取值,得到元素y(2) 的值'1'。

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

相似回答
大家正在搜