c语言中*p=a是什么意思?
发布网友
发布时间:2022-04-30 17:03
我来回答
共5个回答
热心网友
时间:2022-06-28 02:18
首先来说一下*和&,为了便于理解你可以认为,这里*是取内容,&是取地址。
我不讨论它们的区别,因为*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就不算错了?后来老师给的解释是这种形式只有在上面那种情况下成立,其他的情况确实都是错的。
热心网友
时间:2022-06-28 02:19
c语言中*p=a是指针变量赋值语句,这种写法有两种可能意思:
指针变量定义时的初始化赋值
int a[10];
int *p=a ; //这时的a是个地址,如:数组名或指针变量,表示定义指针变量p,同时,p指向地址a。 这里的*是跟随int的,用来表示p变量是int *类型。
指针变量定义后,给指针变量所指内存中的数据赋值
int a=10, x;
int *p ;
p=&x ; //p指向变量x的地址
*p=a ; //这表示向p所指向的地址中存储一个数据a,a是个整型数据。p是x的地地址,*p就是x,本句相当于x=a ;
这里的*是指针变量引用操作运算符,表示引用指针中的数据
注意:
p=&x ; 很重要,指针变量必须要指向一个明确的地址,然后才能*操作,否则,未指定地址的指针变量被称为野指针,引用野指针会造成程序运行异常。
热心网友
时间:2022-06-28 02:19
付费内容限时免费查看回答请等一下哦
一般来说*p=&a的表示方法是错的,*p=a和p=&a是正确的。
*p是一个值;p是一个地址;两者完全不相同。
p=&a的意思是:将a的地址赋给指针p。
*p=a的意思:将a的值赋给p指针指向的地址的值。
[比心][比心][比心]
如果你的问题已经解决,辛苦你一下5星赞。非常感谢~祝你生活愉快哦~
如果您对我的服务满意的话,可以关注一下哦,欢迎随时咨询哦~
热心网友
时间:2022-06-28 02:20
1、在声明语句中int a;int *p = a; // 声明p为整形指针变量,并指向变量a的存储地址。 2、在执行语句中int a = 2,b = 3, *p;*p = b; // p指向的地址单元存入b的是值3......................*p = a; // p指向的地址单元存入a的是z值2 通过以上两个例子可以看出,*p = a在声明语句中和执行语句中的含义是不同的。
热心网友
时间:2022-06-28 02:20
将a的值赋值给指针p
进行这样的操作,你要确保变量a是一个合法的指针!
否则,当你使用指针p时,会出问题!
c语言中*p=a是什么意思?
c语言中*p=a是指针变量赋值语句,这种写法有两种可能意思:指针变量定义时的初始化赋值 int a[10];int *p=a ; //这时的a是个地址,如:数组名或指针变量,表示定义指针变量p,同时,p指向地址a。 这里的*是跟随int的,用来表示p变量是int *类型。指针变量定义后,给指针变量所指内存中的数据赋值...
C语言指针问题:在定义指针时*p=a和p=a有区别吗?
当然有区别,区别很大,*p=a,就是给指针的表示的地址赋值,也就是赋值给指针指向的存储单元;而p=a,则表示给指针赋值,也就是指针的地址变成了a。两者一个指明了具体值大小,一个指明了具体位置。
C语言 红笔划的地方不理解 *p=a 其中a为数组名称直接可以当作数组的地址...
这里定义了一维数组a,那么*p=a就是将a数组的第一个元素的地址赋值给p使p成为一个指向该数组的第一个元素的指针。很久没碰c语言了,建议你再自己试一试 有时这种问题可以尝试自己写一段代码来验证,这样理解会更加深刻
在C语言中,*P=a,**q=&p是什么意思
p是个指针(一级指针),把a的值赋给p所指向的地址,q是个二级指针(也就是指针的指针),q中保存这p的地址
c语言里 *p=a和p=a的区别?
在c语言里 *p=a 是使用在声明指针变量的同时给它赋初值。p=a;是在已经声明了指针变量以后,再给它赋初值。这两者是有区别的,不能通用的。
关于C语言,*p=a[0]是什么意思呀?
对于二维数组a来说:int a[5][2]; a[0]是第0行起始地址指针 因此:int *p=a[0];相当于int *p; p=a[0];的合写,即p指向a数组第0行起始位置 相当于写:int *p=&a[0][0];
c语言题:若有定义int a[9],*p=a;则p+5表示( )
你好,选B。int *p = a表示指针p指向数组a的首地址。也可以说是a[0]的地址。所以p+5指向a[5]的地址
C语言 int a,*p;*p=a;这个语句对吗?
int a, *p;这个叫声明,表示a是一个int类型,p是一个指向int类型的指针 还没有定义哦 p=a,这个叫赋值语句,但是右边的 a只是一个声明,而没有定义,因此是没有用的,这个用法是错误的 TC支持,那是因为 编译器对 标准C规则进行了扩展,但是换了编译器未必就正确哦 所以好的编程习惯就是一定 ...
c语言int *p=a解释
你的理解是对的.我帮你分析一下:int a[i]的i需要已知,要不,是错的.int *p=a是定义指针变量p,并把数组a[i]的开始地址a赋值给p. 因为a代表数组的开始地址,所以把它理解成int *p p=a;是没有问题的.但是,如果是 int a;int *p=a则这个表示把a的值当作地址赋值给p,没有实际意义....
c语言多极指针里面的这个*p==*a是为什么? 为什么不是*p==a, **p==*a
char**p;说明了p的类型,p=a;是将a赋值给p,二者相同。因此有以上的执行结果。int *p.这是一个指针变量,它就是一个只能用来装地址的变量。p++就等于p+1啊,他们都是指向一个位置的,如在vc下,一个整形数据占4字节,p=2000(地址,二进制的,这样写方便你懂),*p++是说用后p指向的地址...