C语言下列指针加减运算时,为何PB+1会是a的地址?为何地址的排列顺序是a在最后d在最前,地址顺序如何确定

作者&投稿:伯牙吾台肩 (若有异议请与网页底部的电邮联系)
一个C语言指针操作问题~

int (*ptr)[2]; 这表示 一个数组的指针, 并非 int *ptr[2] (此为指针数组)
前者 表示 ptr 指向 一个 长度为2 的一维数组, 意味着 指针移动的单位 是 一个数组 并非一个元素
后者 表示 ptr是一个 存储两个 指针类型变量的 数组 (ptr是这个数组名 并非一个指针)
所以 前者多用在 二位数组的行指针, 后者多 (每个元素为一个指针,但每个指针 指向的 元素长度可以不等(如字符串这类的)) 非等长(列数不等)二位数组 也有用到
既然 楼主没有 用到二位数组 那么 这两种类型都是不合适的

要实现楼主的意思 很简单啊
int *ptr;
ptr=a;
这两行 改成这样 就行啦 其余行不用改的
应该就编译通过啦
还有一点 要注意啦 a的确是 数组名 也是 首地址,但绝对不是一个指针啦 ,是一个地址型常量
所以 像a++之类 把它当指针来用的语句都是错误的 (他的值是不能变的)
楼主 的 这个编译错误 显然 是一个 类型 不匹配 赋值 造成的
意思是 赋值号 ‘=’ 不能把一个 int[2]型 转为int(*)[2]; (为什么会错 看来前面的 就知道了 两者的值类型 是不同的 虽说都是地址, 不可能转换)
希望有帮助啦

**s表示指针的指针,也就是s存放的是指针的地址,它只接受指针的地址,所以你的s="computer"会报错,*s="computer"是赋值语句,就是把字符串的首地址这个数据放在s里,而*s本身又是一个指针的地址,再对他取值就是**s就是字符串的内容了

在通常的dos、windows情况,程序段的地址从低到高分配,堆栈段地址从高到低分配。局部变量是分配在堆栈上的,所以按顺序分配的地址是a>b>c>d

但是要说的是C语言并不保证变量地址的这种关系内存分配关系,所在在实际程序中是不可以这样用的,这样做的目的也只能是探索编译环境是怎么分配内存的

局部变量保存在栈中,所以要符合栈的特点。该栈是向下递增的,所以内存地址是递减的。


简述c语言中的指针
在C语言中,指针的声明遵循“类型+指针变量名”的格式。例如,`int *p;`表示声明了一个指向整型的指针变量p。初始化时,指针被赋值为一个内存地址。在声明时可以直接初始化,如`int *p = &a;`,这里p指向变量a的内存地址。三、指针的操作 指针的主要操作包括取值(解引用)、指针的加...

C语言指针运算问题(问题一)*p++和(*p)++(问题二)a[i][j]=*(a[i]+j...
p++ 等同于 *(p++) 先执行p++ 表达式,然后用p++ 表达式的值来参与* 表达式运算。那么p++表达式的值是什么?对了,是自加之前的p的值,这个值的类型是什么?是跟p相同类型的指针,所以对这个值进行取值操作,取出的是p自加之前的指针指向的内容。第二个问题更简单了。a[i][j] 是二维数组,...

c语言小问题,如图,这个指针法是什么意思?
指针法就是通过指针运算来访问数组元素。指针是可以运算的!指针的运算分为加法和减法,注意和普通的数字加减法有很大的区别:指针的本质是一个内存地址,内存可以简单的认为是一整块空间,地址是从内存0开始连续的整数。指针的加法只能用指针加上一个整数,而不能是另一个地址,也就是说“指针+整数”是...

C语言 指针运算
include<stdio.h> int main(){ char *p,s[20];int m,n,i;printf("请输入字符串:");gets(s);printf("请问从第几个字符开始删除,要删除几个字符:");scanf("%d,%d",&n,&m);for(i=0,p=s+n-1;*p;i++)p++=s[n+m-1+i];printf("得新的字符串:");puts(s);return 0;} ...

c语言中的指针变量间可以进行加减运算吗?
j=x+n-i-1;这里错了 改成x+n-(i-x)+1;i-x才是地址增量 x+n-i+1得到的就是一个相当于&x[n-i+1]建议LZ用数组来编程 这样写别扭不说 还容易出错!

c语言中变量的指针,其含义是指变量的什么?
指针变量是有加减运算的,但是要注意以下几点:1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址。指针变量可以加减,但是只能与整型数据加减,此时加减的含义并不是其地址值进行了加减,也就是说如果指针...

画红线这个语句什么意思,指针也可以加减常数和变量?C语言。
将指针t向后偏移m-1个字节。指针当然可以做加减运算了,指针本身也是个变量,也能加变量的。

有关指针的C语言题目,详细题目在下
参数是值传递的 f(&x,y); --x传地址,值被修改成3(2+1),y传值,不能修改,还是4 f(&y,x);--y传地址,值被修改成6(4+2,因为k是static的,会保留上次的值),x传值,不能修改,还是3

c语言:程序填空 利用指向函数的指针实现函数调用,完成可选择的加减乘...
\/*Please input the expression a+(-*\/)b:9\/39 \/ 3 = 3Press any key to continue \/ include <stdio.h>int add(int x,int y) { printf("%d + %d = ",x,y); return x + y;}int sub(int x,int y) { printf("%d - %d = ",x,y); return x - y;}int mult(int x,...

C语言中结构体指针之间不能加减运算吗?
可以相减的。问题在于,你的 struct ElemType *base,*top;应该改成 ElemType *base,*top;

西吉县15636815218: C语言问题,求解
归牧凯尔: 我一开始看这个程序的时候也觉得有点奇怪,不过经过测试后,知道什么回事了.首先,解释一下这个*pb=b1+3,这个是将pb指针式向字符串defg,然后你说的--pb其实是指针自己在自减,这样,指针就一个个往前移动,最后移动到,”a“这个字符处,这个时候就b2这个数组存放的也是"abcdefg"了.如果不明白,先去看看,指针和数组,字符串的关系,就明白了

西吉县15636815218: 请求在线解释C语言 while(*pa).*pb='0'; pb=b;是什么意思 -
归牧凯尔: 变量pa、pb、pc都没定义呀

西吉县15636815218: 在C语言中指数运算怎么用呀 -
归牧凯尔: 1、C语言中指针运算要用pow()函数,例如2的4次方要写成这样:pow(2,4); ^在C语言中是一个位操作符,作用是按位异或.注意,pow()函数要包含math.h文件2、例程:#include #include int main(void) { double ans; double x=5; ans=pow(x/101.325,0.19);/*计算(x/101.325)的0.19次方*/ printf("%lf",ans); return 0; }

西吉县15636815218: c语言指针*p中p++什么意思 -
归牧凯尔: **p :二级指针,表示p所指向的地址里面存放的是一个指向类型的指针. *p:一级指针,表示p所指向的地址里面存放的是一个类型的值. 扩展资料: 指针变量可以进行加减运算,例如p++、p+i、p-=i.指针变量的加减运算并不是简单的加上...

西吉县15636815218: C语言 假如一个指针指向二微数组.那么 *(*(p+1)+1)对么.为什么先给p加1再取值 再加一 -
归牧凯尔: 也许楼主基础已经很好了,我就说点核心的,你的问题的也不想慢慢解析. 指针的加减实根据指针类型偏移的,例如,char *p,char类型指针,p=p+1,表示p在内存偏移了1个字节,int *p,p=p+1,表示偏移了4个字节,结构体同理,也就时说,...

西吉县15636815218: C语言中关于指针加减运算中的(pa)+n*sizeof(指针数据类型)什么意思?有点不理解,请举个例子,谢谢! -
归牧凯尔: int int int 设在这连续的内存存放3个int类型的数,指针p指向第一个数(即p中存放有第一个数的地址(设为0x10000)),要想p指向第二个数, 0x10000+1x2=0x10002 (一个内存单元存放1个字节的数据,int占两个字节,ox10002为第三个数据存放的地址),同理,指向第三个数 ,0x10000+2x2=0x10004

西吉县15636815218: C语言题目,有关指针的. main() {char s〔〕="ABCD",*p; for(} -
归牧凯尔: 首先:p = s+1; // s表示"ABCD" 这个字符串的首地址,即指向A的地址 p = s+1, 则是在s的位置上向后偏移了一位,即p指向了B的地址; 然后把p指向的字符串打印出来就是"BCD" p++; //p指向的是B的地址,++后就向后偏移一位, 就指向了C的位置, 所以打印出来是"CD"同理这样下去,直到p < s +4 ;不成立, 则退出循环

西吉县15636815218: c语言,一个函数,为什么指针指向的值是a[1]? -
归牧凯尔: 不对**p无意义, 你应该是打错了 q指向了p, 所以*q 等价于p, 所以**q等价于*p p一开始指向a[0], 但是第一个输出有个自增运算, 所以那一行执行完以后, p指向a[1] 所以*p就是a[1]的值, 所以**q输出的是2

西吉县15636815218: c语言中指针变量可以相加吗?其含义是什么? -
归牧凯尔: 指针变量是有加减运算的,但是要注意以下几点:1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址.指针变量可以加减,但是...

西吉县15636815218: C语言中,*pa,*pb是指向a,b的指针.直接将a,b的值互换,为什么指针还是指向原来的值啊?? -
归牧凯尔:#include <stdio.h> int main(void) { int a=1,b=2,t; int *pa,*pb; pa=&a; pb=&b; t=a;a=b;b=t; printf("a:%d,b:%d,pa:%d,pb:%d",a,b,*pa,*pb); getchar(); return 0; } 这里有很多c 语言的学习小程序你可以下载 不过一个要等30秒 http://www.yunfile.com/explorer/getLink/hao19/1b90a2a0.html

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网