指标本质就是储存记忆体地址的一个变数。所以指标可以指向某个变数在记忆体中储存的单元格嘛。变数去访问单元格最后也是编译器通过变数名和地址一一对应去查询的。而指标里面直接储存的就是地址,所以直接可以访问地址所对应的单元格。
不知道楼主说的是说明情况。所以几种可能的都说一下:
测试程式码
#include "stdio.h"
#include "conio.h"
main()
{
int a=1
int *p=&a
int *q,*r
q=&a
*r=&a
printf("p=%d,q=%d,r=%d",p,q,r)
getch()
}
int *p=&a 这是很标准的,把a的地址个p指标变数。
int *qq=&a这也是很标准的。定义一个指标变数,然后将a的地址赋值给她。
int *r*r=&a首先r是个指标变数,但是r指向记忆体中那个单元格呢?r没有赋初值就开始用了。这是很严重的。r是个游离态的指标。 *r表示取出r对应的那个地址中的值。r都没有指向一个具体的单元格,如何去取值啊。
C语言中定义int c[4][5],(*p)[5]p=c其中p、p[0]、*p有什么区别?这个不太好理解啊!
第一个int c[4][5]是二维阵列, 可以理解为有4个元素的阵列,其中每个元素又是5个整数的阵列.
第二个int (*p)[5]是阵列指标, p是一个指标, 它指向的是int [5],即5个整型, 这时p++是增加20个偏移.与int *p[5]不同
p = c 就是阵列指标p指向 &c[0], 当p = c时p[0]就是c[0], p[1]就是c[1]p[1][0]就是c[1][0]
上面的定义可用如下替换:
typedef int MyType[5]定义一个新的型别,大小为5个整数.
MyType c[4]
MyType *p
p = c
这样就好理解啦.
C中指标与阵列关系较复杂, 但只要把a[5], b[4][5], c[3][4][5], *p1, *p1[5], *p2[4][5], (*p3)[5]等搞懂就差不多了. ^_^
c语言问题!int *p[4]和int (*p)[4]有什么区别?int *p[4],就是p本质上是个阵列,只不过阵列中的每个元素都是指标
int (*p)[4],就是p本质上是个指标,指标指向一个一维的阵列
这种题的话,其实可以先根据运算子的优先顺序、结合性,先确定识别符号本质上是一个什么,然后再去补充
例如,int *p[3],先根据优先顺序,等效于*(p[3]),所以p本质上是一个有三个元素的阵列;那么阵列的每个元素又是什么呢?是一个指标;那指标指向的又是什么呢?是指向一个int型的资料;所以整理一下就是p是一个有三个指向int资料的指标的阵列,本质上就是一个数组
c语言超级简单指标问题 int a,*p那么请问【 p=&a 】和【 *p=&a 】有什么区别?以下两段程式码等价:
一、
int a,*p
p=&a给指标赋值
二、
int a,*p=&a宣告指标的时候进行初始化
C语言里面指标,*p=&a和p=&a,有什么区别如果a都是基础型别, 而不是指标, 比如a为int
那么 p=&a, 是把a的地址,赋值给p, p需要是int *型别。
而*p=&a 是把a的地址赋值给*p, p需要是int **型别。
注意 如果是int *p=&a这种形式
是定义int *型别的p, 并给p初始化为&a。 等效于
int *p
p=&a
还是给p赋值,而不是给*p赋值。
c++语言中int*p p=s 和*p=s 有什么区别
int *p 表示 P 为一个整数型的指标
p = s 如果和上面组合起来必须两个都是指标或都是变数,否则编译要出错,意思是把 S 的值给 P
*p = s 是把 S 的值给 p 指标指向的地址
c语言中 int *p[4]和int (*p)[4]什么区别前者是指标阵列,为4个int指标的阵列,有4个元素
后者是阵列指标,为一个指标,型别为指向包含4个int型别元素的一维阵列的指标
【C 语言】指标运算中。*(p++)和(*p)++有什么区别可以把指标看做阵列
*p 相当于 P[0 ] 第0 个元素的值;
*(p++) 也就相当于 P[1][ ] 中加1;
(*p)++相当于 P[0]++值加1;
自己体会一下、
越向上学习程式设计,就越要能把问题抽像化,我这个比方不是很恰当,但很方便理解。
C语言指标。 int *p=&a[0]; 和int *pp=&a[0]等价吗?等价的,一个是在定义的时候就让指标p指向a[0]的地址,一个是先定义指标p然后再讲a[0]的地址复制给p,结果是一样的。只是在编辑器跑的时候有点差别
C语言中指标*p与*p-'0'和*p+'0'有什么区别*p就是指标指向目标的值
-'0' 就是减去48,如果是p指向的是数字字元(一位)就转换为对应的数字的ascii码
+ '0'就是加上48,当然就是将p指向的数字(一位)转换为对应的ascii码
对以上代码分析如下:int a=1,b=2
int *p1=&a,*p2=&b
printf("%d",*p1)
指针p1指向变量a,而a的值是1,*p的值就是1,这里先输出1
void afunc(int *p1,int *p2)
{
int *p3
p3 = p1
p1 = p2
p2 = p3
}
这个afunc函数是对形参p1和p2的值进行了交换,也就是说交换的是地址值
在调用时afunc(&a,&b),不会对变量a的地址和变量b的地址有任何影响,变量a还是原来的变量a,变量a的值还是1,
第2个printf("%d",*p1)仍然输出1,
因此以上程序的输出结果是11