c语言中pa0与pa0有什么区别

2020-12-05 14:16:49 字数 6669 阅读 1209

1楼:匿名用户

对于指针来说,

*p = a[0],表示向地址为p的内存区域赋值为a[0]。

p = a[0],把变量p的值改为a[0],这个语句正常应用中是错误的。变量p的值为内存地址,这样赋值会丢掉p原来指向的内存。

正确给内存地址赋值应该使用第一句。

2楼:匿名用户

这个是指针和变量的区别:

第一个表示变量p存的是数组a的地址值,即表示指向数组a

第二个表示p和数组a的第一个元素的值一样。

3楼:

有啊,*p是个指针,他储存的是一个变量的地址。你把a[0]里的数据赋给他,是储存在那个变量中,不是在存*p中。另一个p是个变量,a[0]中的数据时存在p中

例如:int *p;

p=&b;

*p=a[0];

b==a[0] 值是放在b中

另一个是放在p中 ,不同的

4楼:

都是赋值语句,p的数据类型不同,被赋值的对像不同而已

*p=a[0] ==>赋值对像不是变量p本身,而是它所指向的对像

p=a[0] ==>赋值的对像就是变量p本身

c语言数组中*p=a,与p=&a[0],有什么区别?跪求!!!

5楼:呆小鱼

如果a是数组,那么没区别,都指向数组第一个元素

6楼:争议什么

一个指向了a数组的地址,一个指向了a[0] 的地址。

#include

void main()

for(i=0;i<5;i++)

printf("\n");}或

#include

void main()

for(i=0;i<5;i++)

printf("\n");}

7楼:匿名用户

p=&a[0] 等价 p=a;

就是问 *p=a与p=a的区别

*p=a 把a的值送入 p指向的单元;

p=a 把a的值送入 单元 p区别就是 单元与指向的单元是不同的

8楼:匿名用户

*p=a指将数组的地址存入地址p的位置,即要知道a数组地址,请到*p位置找

p=&a[0]为将地址p指向数组a[0]的地址上

9楼:羊欢

第一个指针p指向a的地址,第二个p指的是数组a第一个数

10楼:匿名用户

是一样的, 没有区别

c语言中*p=&a和p=&a有什么区别

11楼:非常可爱

c语言中*p=&a和p=&a只有一个区别就是指针初始化时间不同。

p=&a:p是1维指针;

*p=&a:p是2维指针;

p=&a示例:

inta;

int*p;

a=5;

p=&a;

printf("valueis:%d.",*p);

扩展资料*p=&a的使用

int a, b, c;

int **p;

a = 5;

b = 6;

c = 7;

p = (int **)malloc(el_**t * sizeof(int *));

*p = &a;

*(p + 1) = &b;

*(p + 2) = &c;

for(int i = 0; i < el_**t; i++)printf("value is : %d\n", **(p + i));

12楼:育知同创教育

总得来说没区别,就是指针初始化的时间不同而已int *p = &a;//这里p声明的时候直接初始化它的值为变量a的地址

int *p;//声明指针p,p的值不确定可能指向任何地址,p = &a;//显示初始化使p指向a的地址

13楼:匿名用户

如果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赋值。

14楼:匿名用户

1.一般来说*p=&a的表示方法是错的,*p=a和p=&a是正确的。

2.*p=a的意思:将a的值赋给p指针指向的地址的值;

3.p=&a的意思是:将a的地址赋给指针p;

4.区别:*p是一个值;p是一个地址;两者完全不相同。

5.*代表着p指向的地址的值,简单来说就是取值;&是取地址符号,取的是地址;p是指针,可以理解为所指向的值的地址,*p就是取p指针指向的地址的值,&a就是取a的地址。

15楼:匿名用户

对于指针来说,

*p = a[0],表示向地址为p的内存区域赋值为a[0]。

p = a[0],把

变量p的值改为a[0],这个语句正常应用中是错误的。变量p的值为内存地址,这样赋值会丢掉p原来指向的内存。

正确给内存地址赋值应该使用第一句。

16楼:天雨下凡

这样问说明你对指针的概念还不清楚,以下两种方式等价:

一、先声明指针,再给指针赋值

int *p,a;

p=&a;

二、定义指针的同时给它赋值

int a,*p=&a; //这里的*p可以解释成int * p,int *表示p是指向int型变量的指针

17楼:匿名用户

#include

intmain()

18楼:平野律子

举个例子吧: a是一个数组,它在内存中的初始地址比如说是0x11111111(简单假设),且a[0]的值是1,也就是说,内存0x11111111中存储的值是1。 于是,&a[0]=0x11111111,a[0]=1。

int *p; p=&a[0]; 指针p会有一个自己的内存地址,通常占用4个字节(比如初始地址是0x22222222)。p的值是&a[0],也就是说从0x22222222开始,后面4个字节中存储的值是0x11111111。 *p的值就等于p所指向的内存地址中存储的值,也就是a[0]。

所以*p等于1。 如果*p=&a[0]的话,很容易出问题。比如说int *p之后,p的初始值可能是0xcccccccc(debug版本)或者0x00000000(release版本)。

这个时候,如果你写一句*p=&a[0]的话,将会把0xcccccccc或者0x00000000内存之后4个字节的值变为0x11111111。 而0xcccccccc和0x00000000内存区通常是不可写的,这样就会报错。采纳哦

19楼:爵爷

在定义指针的同时让指针指向某个地址 如int *p=&a;不能直接使用*p=&a; p=&a;代表的是让p指向变量a的地址

20楼:百度用户

*p=&a;是将a的地址赋值给*p,结果会是一个十六进制的数。 第二个是让p指向a的地址空间。*p的傎和a相等。

int a=2,*p; *p=&a; 打印*p应该是一个地址值,很长一串, p=&a; 打*p印结果会是2;

21楼:

有啊,*p是个指针,他储存的是一个变量的地址。你把a[0]里的数据赋给他,是储存在那个变量中,不是在存*p中。另一个p是个变量,a[0]中的数据时存在p中

例如:int *p;

p=&b;

*p=a[0];

b==a[0] 值是放在b中

另一个是放在p中 ,不同的

在c语言中,int *p,a; *p=&a,和p=&a有什么区别?

22楼:天雨下凡

这样问说明你对指针的概念还不清楚,以下两种方式等价:

一、先声明指针,再给指针赋值

int *p,a;

p=&a;

二、定义指针的同时给它赋值

int a,*p=&a; //这里的*p可以解释成int * p,int *表示p是指向int型变量的指针

23楼:匿名用户

#include

intmain()

{int*p,a=0xaa;//声明int指针

c语言中,p=a[0]与* p=&a[0]等价吗

24楼:匿名用户

int p=a[0];和int *p=&a[0];

这两个?你既然你问问题,你能把问题描述清楚吗。

一个是整型,一个是指向整型的指针,当然不一样。

c语言中,p=&a 那么*p与a的区别是什么?

25楼:星呈幻

a和p是变量,&a和*p是表达式,1和0x1000是常量a和*p表示的都是整形左值,p和&a表示的都是指针型左值,1和0x1000表示整形和指针型右值。(左右值的概念不清的话,google一下)

在内存中,a和p有存储空间空间,a存放着1,p存放着0x1000,*p和&a没有空间,他们的运算结果是在寄存器中存放的,1和0x1000也有空间,在程序的常量段存放。

*p按照stanley lippman的著作《c++ primer》中的描述,p是指针变量,*是解引用操作符,*p是一个表达式,含义是“对指针变量p进行解引用操作”,这与表达式&a的含义“取整形变量a的地址”是正好是相反的操作。

26楼:失落血天使

首先 a和p都是变量 1000是常量,这里只有a和p分配了内存,但是1000和1没有

p 是指p的值,也就是1000

&a 是指a的内存地址

*p 是指p的内存地址

a 是指a的值也就是1

1 是a的值,放在分配给a的地址里

1000 是p的值,放在分配给p的地址里形象点说 ,a和p是房子

1和1000是住户,1 住在a里 1000住在p里p 是指p的住户

&a 是指a的门牌

*p 是指p的门牌

a 是指a的住户

1和1000 是住户

书的话,谭浩强的 c语言程序设计第3版 里面有详细的说明帖子就不晓得咧·······

27楼:

&a取址 *p取值这没有什么可说的。

int *p; int a;

a的地址1000h,即&a == 1000h. p是指针,它本身也有存放它的地址,设1200h,

即&p == 1200h(win32下,指针本身长度32位即4字节,可通过sizeof(p)得到). 这样就是用到两块内存了。

p = &a; 即p == 1000h. 这是一个地址值,本质是值,即可以加减等操作的。但是加减后的p, *p可能就无法访问了,因为它已经不指向a了,比如p == 1004h了,如果这是在某一函数里操作的,而1004h地址并不本程序的地址空间里,取*p时那就非法访问,要崩溃的;但如果1004h地址正好是这函数里另外一个int b;变量的地址,那*p的值就是b了。

*p表示取p指向地址的值,也就是1000h上的值; a = 1; 说明1000h上的值为1,所以*p == 1;a, 它本身只是一个符号而已,这个符号代表了地址1000h起的int型长(4字节)的一个内存块, a=1,就是内存块放一个值1, 如果有汇编的思想,能更形象点:[1000h] = 1,根本不需要a,b,c...之类的字符来表示,直接对内存地址进行存取。

28楼:匿名用户

-------------------------------------

1. int a = 1;

2. int *p; -> 他的地址是1000

3. p = &a;

-------------------------------------

1.在内存 某个 地址 放入一个int型的数字[1],这个 地址 符号名为 a

2.声明一个指针,这个指针 在内存位置1000的地方 类型是指针,符号名为 p

3. [*p] 我们声明时 就是 *p 这个形态 所以就叫他指针.

那么:a 是内存某个地址的 符号,语法上我们用 &a 表示这个符号的真正内存地质。

*p 因为是类型是指针,我们不能赋予它值,只能给他一个要指向的地址,共享和修改那个地址里的内容(先不考虑const语句),。指针p里放着 a的地址,当电脑读到 p 时,直接去找 里面的地址去了。

p 指向地址,*p表示那各地址的内容。*p 英语里就叫它 point p 即 指针p

过程:p = &a : p 复制 a的地址到自己的位置。

*p = 2 : 电脑判断 p的类型,是指针,就跳到 p 里的地址位置,在判断类型,不是指针,就把当前位置里的 值 改为 2,如果还是指针,就重复上面 直到遇到不是指针类型的地址。

至于名称,就叫指针,变量是 总称,变量 a, 变量 b, 给他们赋予范围和类型 ,int型变量a,指针型变量p;

C语言中与的区别,c语言中“&”与“*”有什么区别?

1楼 匿名用户 是取地址 叫解引用,意思是取地址的内容 举例 int a 3 int b a 这里 表示取a的地址 b就是去b的地址的内容就是3 2楼 诡其辞 s形式表示取变量s的地址 a b形式表示a与b之间进行位与运算。 s形式表示指针变量指向的位置 a b形式 呵呵!不消说了。 3楼 匿名用户...

c语言中与有何区别,c语言中%c与%s的有什么区别?

1楼 匿名用户 在定义变量时 是定义指针 是引用 注 好象c没有引用 例如 int pvar null 定义一个int类型指针int var 0 int pvar var 定义一个引用 并且定义时要指定所引用的对象 在使用时 是解指针 即取其指向的变量的值 是取地址int var 10 int pv...

c语言中while(s)与while(s i0)的区别

1楼 南京新华电脑专修学院 果s是一个char型指针 0 也即int i 0 while s i int i 0 while s i 是对的,也即char s while s 0 与while s 0 的区别 5 2楼 步行者 while s 0 表示指针s指向的值不等于整数0 int s whil...