c语言p和p
A. c语言 *p跟p什么区别啊
int a[10]; *a=a[0], a=&a[0]; 同理*p 就是p指针变量中的内容,这都是(逻辑代码)C代码的一种表示而已。
给你个例子:
注:这里指的通用寄存器有eax,ebx,ecx,edx,ebp,esp,esi,edi
dword ptr:告诉处理器,安装双字,即16X2位bit处理
mov:方向 A <- B
lea: load execute address EA指的是执行时,分配的内存地址
[] : 取寄存器标识出的内存块中的内容
1:
2: int main(){
00401010 push ebp // 内存分配
00401011 mov ebp,esp
00401013 sub esp,70h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-70h] // 初始化
0040101C mov ecx,1Ch
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
3:////////////////////////////////////////////下面是关键
4: int array[10];
5: int* p = array;
00401028 lea eax,[ebp-28h] // 取数组变量内存空间地址,值存入eax寄存器
0040102B mov dword ptr [ebp-2Ch],eax // eax寄存器值接着转存到 p指针变量内存空间
6: int b = *p;
0040102E mov ecx,dword ptr [ebp-2Ch] // 取p指针变量内存空间地址,放入一个空闲的ecx寄存器
00401031 mov edx,dword ptr [ecx] // *p,即把ecx,或者是说p指针所指的内容取出,放到edx里面。
00401033 mov dword ptr [ebp-30h],edx // 把edx里面的东西,就是所谓的*p放到b变量空间里面。
7:
8: return 0;
00401036 xor eax,eax// 异或掉使用过的传值寄存器,设置错误码为0.
9: }///////////////////////////////////////收工
00401038 pop edi
00401039 pop esi
0040103A pop ebx
0040103B mov esp,ebp
0040103D pop ebp
0040103E ret
B. c语言中p*是什么意思,他和*p的区别是什么
p*
如是出现在算术表达式中,这个星号就是乘号,表示相乘,如果是出现在声明中(如变量定义),那就表明p是一种数据类型,p*表示要声明这种类型的指针变量。
*p
依然可以表示相乘的运算,也可表示提取p指针指向的位置保存的值。例如:
int a=9;
int *p=a;
printf("%d",*p);
这个printf()调用中的*p表示提取p指针指向的地址(即变量a的地址)保存的值(即变量a的值)
C. c语言的指针部分*p与p的区别是什么
p是指针变量,其值是一个变量的地址。p收到了哪个变量的地址,就指向哪个变量。该变量成为p的对象。
*p是p所指向的对象的值。
例如:int i=3,*p;
p=&i; 注意:p收到i的地址,故p指向i,i是p的对象。
printf("%d,%d ",i,*p); 输出:3,3 注意:*p是p所指向的对象的值,即i的值。
D. c语言的指针部分 *p与p区别
c语言的指针部分 *p与p区别如下:
1、作用不同
*p表示此指针指向的内存地址中存放的内容。
p是一个指针变量的名字,表示此指针变量指向的内存地址。
2、输出内容的格式不同
*p常用在一个和指针类型一致的变量或者常量。
p输出一个指针的地址,通常是输出一个16进制的数。
3、效果不同
*p是让编译器从指定的地址中读取出数据。
p是用来存放要读取数据的地址。
(4)c语言p和p扩展阅读
C语言中使用指针的作用:
1、指针使程序的不同部分能够共享数据
类似于共享内存,如果将某一个数据值的地址从一个函数传递到另外一个函数,这两个函数就能使用同一数据。
2、利用指针,能在程序执行过程中预留新的内存空间
大多数情况下,可以看到程序使用的内存是通过显式声明分配给变量的内存。但是在很多应用场合中,可能程序运行时不清楚到底需要多少内存,使用指针可以让程序在运行时获得新的内存空间,并让指针指向这一内存更为方便。
3、指针可以用来记录数据项之间的关系
在高级程序设计应用中,指针被广泛应用于构造单个数据值之间的联系。比如,程序员通常在第一个数据的内部表示中包含指向下一个数据项的指针(实际上就是链表了),来说明这两个数据项之间有概念上的顺序关系。
E. C语言中*p和**p有何区别
一、表示的东西不同
*p表示p代表相应数据类型在存储单元中存储的首地址,而这个存储单元存储的是相应类型数据的数值。
**p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值。
二、基类型不同
例如int *p1,**p2;
两者本质上都是指针,但是两者的基类型不同。p1的基类型是int,换句话说p1指针指向的是int型的数据,而p2的基类型是int *换句话说p2指向的是指向int型数据的指针,即指向指针的指针。
三、用法不同
例如int *p;
那么p就是指向int类型变量的一个指针。(即数组)
如果int**p;
那么p就是指向int*类型指针的一个指针。(即指向一维数组的指针,即二维数组)
F. c语言中,p.和p->有什么区别
p. p是类的对象,点后面要跟类中的元素,这样就完成了类里面元素的调用,元素可以是变量也可以是函数。
p->是传地址,比如说有另一个变量a,你p->a就把p的地址也给a了
G. C语言编程中通过&p和p指令获取的内存地址是不一样的
当然不用一样。
p是指针变量,和一般变量不同的是,它里面存放的是一个地址。(你这里p存放的就是ch变量的地址)。
&是取地址符号,取的是变量的地址。
*是取指针所指向的地址的值。(这里p指向的是ch,所以对*p赋值,就等同于对ch赋值)。
所以你打印p是变量ch的地址,而你打印&p打印的是变量p的地址,自然不同。
H. C语言 *p和p有什么区别啊为什么最后输出*p=20啊
p为指针变量,存储的是变量值在内存中的地址,单独的p表示一个内存地址,*p表示从p地址中取出其中存储的值,即count的值20
I. C语言p和&p的区别
如图所示,按道理在学汇编后会懂得的