c语言中有时会定义p a是什么意思不应该是p a吗

2020-11-26 07:33:03 字数 5922 阅读 1220

1楼:夏成

int a;

int *p=&a;

相当于int *p;

p=&a;

记住就行了;

除了定义的时候,其他时候*p(正常情况)只能等于内容(a的值);

2楼:匿名用户

int a;

int *p=&a;

或者int *p;

p=&a;

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

3楼:非常可爱

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));

4楼:育知同创教育

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

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

5楼:匿名用户

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

6楼:匿名用户

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的地址。

7楼:匿名用户

对于指针来说,

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

p = a[0],把

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

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

8楼:天雨下凡

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

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

int *p,a;

p=&a;

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

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

9楼:匿名用户

#include

intmain()

10楼:平野律子

举个例子吧: 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内存区通常是不可写的,这样就会报错。采纳哦

11楼:爵爷

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

12楼:百度用户

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

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

13楼:

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

例如:int *p;

p=&b;

*p=a[0];

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

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

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

14楼:清鹏之

让我来综合一下吧

在定义的时候

int *p=&a; 是等同于 int=*p; p=&a;的。该形式只在定义的时候是正确的。就是指针p所指向地址的内容为a的内容。

如果不是定义的时候

*p=&a; 就是它字符的那个意思,就是指针p所指向地址的内容为a的地址。

dev c++试了下

————————————————————————————————————

“*p”表示地址为p存储单元的内容;“p”表示地址;“&a”表示取a的地址;a为变量。

int *p;//初始化指针,但是该指针无指向地址!如果直接使用会有问题。

int *p=&a;//初始化指针,该形式只在定义时正确,表示以p指针所指向地址的值为变量a的值。

p=&a;//表示指针p所指向的地址就是a的地址。即地址间的赋值。

*p=a;//表示指针p所指向地址的内容就是内容a。

在c中,指针一定要初始化,指针加1指的是增加一个存储单元。对数组而言,这意味着把加1后的地址是下一个元素的地址,而不是下一个字节的地址,这是为什么必须声明指针所指向对象类型的原因之一。

15楼:匿名用户

首先来说一下*和&,为了便于理解你可以认为,这里*是取内容,&是取地址。

我不讨论它们的区别,因为*p=&a这个形式一般是错的,常用的是p=&a。

下面比较*p=a和p=&a。看图,图很详细。

显然它们是等价的。

然后比较*p=&a和p=&a;

则这两种都是对指针变量的赋值,赋值有两种形式

①先定义后赋值

int a=3,*p;(定义指针变量*p)

p=&a;(对指针变量取地址)

②定义变量的同时赋值

int a=3,*p=&a

也就是说在赋值时,

int *p=&a

相当于int *p,

p=&a

它们的区别其实就是

int *p=&a是同时定义*p并对赋值p(即a的地址赋给p),而p=&a,只是对p赋值,没有定义指针变量。

但要注意,只有在同时定义赋值时“*p=&a”这种写法才是对的

其他情况下不要用*p=&a,这种形式,因为根本就不对,如下图。我之前一直的疑问是为什么赋值时*p=&a就不算错了?后来老师给的解释是这种形式只有在上面那种情况下成立,其他的情况确实都是错的。

16楼:沉睡的罗罗塔

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

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

对于指针来说,

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

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

17楼:幻想秘境

*p=a是将a的值给p指针指向的地址的值

*p=&a是将a的地址给p指针指向的地址的值

*p=&a,*p=a和p=&a各是什么意思,有什么区别?

18楼:匿名用户

表达式的意思:

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

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

3、*p=&a的用法错误。

区别在于:

p=&a就是用a的地址对p赋值,a是一个变量,&a就是存储这个变量的内存地址,指针存储的就是一个地址,*p就是这一地址中的内容。

扩展资料另类*和&

两个地方要注意: 在程序声明变量的时候的*,只是表明“它是一个无符号整数,这个整数指向某个内存地址,一次访问sizeof(type)长度”。这点不要和(*)操作符混淆;

在c++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”。

这点不要和(*)声明符,(&)操作符混淆。

19楼:匿名用户

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的地址。

20楼:匿名用户

*是解引用运算符 &是取地址运算符

21楼:小小小子

int *p=&a;

和int *p;pa=&a;等价

这里的*是一个指针说明符,不是间接寻址运算符,我刚好看到这一点分享一下,前面几个人都说这种是错误的,估计理解错了吧

22楼:千古1帝刘公嗣

直接看**运行结果就

清楚了。

#include

intmain()

23楼:匿名用户

这个问题如下所述:

int b=5;a=10;// 定义变量a,并赋值为10;b=5

int *p=&b; //定义指针变量p,并且让指针p指向变量b,其中 & 为

//取地址运算符

*p=a; //是将a的值就是10存放到指针p指向的变量b,这样b的值不再是

// b=5,而是变成b=10

p=&a;// 这句是改变p 的指向,让p指向变量a。例如还有下面的语句

*p=123; //那么这样后就会有p指向的变量的值为123.此处是a=123.