关于指针变量赋值问题

作者&投稿:徒果 (若有异议请与网页底部的电邮联系)
C语言指针的赋值问题~

指针在用要注意初始化,例如:
int *p;
p为指针,地址是未知的,如果直接赋值
*p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针时注意初始化,也就是赋值。
可以int *p=&a;
或者int *p;
p=&a;
然后再对p进行操作
有错。
注意大小写,还有
int a=9;
int *p;
p=&a;//这个是指针指向a
*p=8;
这样就对了。

扩展资料:指针的赋值
int *p;
int a;
int b[1];
p = &a;
p = b;
指针的赋值,“=”的左操作数能够是*p,也能够是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
数组的变量名b表示该数组的首地址,因此p=b;也是正确的
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; //注意啦,p1指向了val2,而没有指向val1
备注:字符串与指针的初始化和赋值
初始化:
char *cp = "abcdefg"; //这个初始化过程,是将指针cp指向字符串的首地址,而并非传递字符串的值。由于,在C语言里面,没有总体处理一个字符串的机制
赋值:
cp = "abcdefg";
*cp=”abcdefg” ;//错误!字符串常量传递的是它的首地址,不能够通过*cp改动该字符串的值,由于该字符串为常量,而它仅仅是简单的将指针指向该字符串常量。

指针是个存着地址的变量,因为我们每定义一个变量,内存就会给他分配空间,那么每个变量必须会有一个存储他的地方,我们称为地址,他指向谁,里面就存着谁的地址。如题*p=a;
此时p里面存的是a的地址(记住这一点),还可以用取地址符&获取变量的地址,如&a;表示的是a的地址。变量的值可以用*号获取。* 后面加一个地址,表示这个地址里面的数值(也记住,很重要)

定义3个原则
A * 后面只能跟地址, *p 表示参数的值
B &后面只能跟变量。 &a 表示参数a的地址
C ’=‘ 是赋值,为了程序的稳定,我们默认只允许同类型的参数进行赋值(若不同类也会赋值,但是执行结果会出错)
就是说,只允许,指针地址赋值给指针地址,变量值赋值给变量值。了解这些,就可以分析了:
int *p,*q; q=p; //对的,因为p,q都是指针,可以相互赋值 依据 A,C原则
int a,*p,*q; p=q=&a;//对的,p,q指针表示地址,根据B原则,&a也是地址,因此可以进行赋值
int a,*p,*q; q=&a; p=*q;//错的,q =&a 是对的,但是p =*q 是错的,根据原则A,C,*q是值,p是地址,与原则C冲突
int a=20,*p; *p=a;// 对的,他们都表示值
int a=b=0,*p; p=&a; b=*p;//对的,p = &a 原则BC ,b = *p 原则AC
int a=20,*p,*q=&a; *p=*q;// 对的,初始时q得到a的地址,*p和*q都是表示值,符合原则C
int a=20,*p,*q=&a; p=q;//对的,原则BC
int p,*q; q=&p;// 对的,原则BC

祝你进步,指针自己琢磨下,会明白的!

虽然B是正确答案,但是对CD的理解不对。
A,*p是对地址为p的内存赋值,因为p还未赋值,这种行为是危险的
B,数组的首址可理解为一个常量指针(即指向的地址不能改变的针),虽然指针不能被修改,但是其指向的地址的内容是可以改的。
C。a是常量,其地址不能被修改
D。错误在于对引用a的初始化,应该使用相同类型(int &a = b)

其实指针完整可以理解为一个整数(对常见的就是一个32位无符号整数),不过它的值有明确意义(代表一个内存空间),所以它的值不能是任意的(受可访问地址范围限制),从这个角度很容易理解为什么指针相加是无意义的(会超出访问范围),而相差是有意义(两个指针之间间隔了多少内存空间,不过要注意大地址减小地址才是有意义的)

其实你问的是一个问题,关于左值和右值的。

在赋值号左边的变量称为左值变量,赋值号右边的变量称为右值变量。
左值变量取其地址,右值变量取其值(内容)。

你可以将变量看做对象,任何变量包含2个属性,一个是地址,一个是数值。地址对应一块内存空间,其中存放数值(内容)。

因此,C++执行赋值语句时,先取左值(左边变量的地址),再取右值(右边变量的数值),然后执行赋值操作,即将取出的右值存入左值。

取值操作不会影响原值。所以答案1是a的地址,答案2还是7.

还是a的地址

a有值,是7


c语言指针变量的赋值语法正确的是?
选项解析:选项A,指针变量需要赋值一个变量的地址,A选项中将x变量的地址赋值给指针变量pb,B选项不能将一个变量直接赋值给指针变量。选项C,C选项中的赋值语法是错误的,正确的赋值语法应该是和A选项相同。D选项的错误类型和C选项的类似,所以综合以上分析,正确的答案为A。

指针变量给指针变量赋值什么意思
当 q=p; 时,就是指针变量p给指针变量q赋值,就是把存储在变量p中的指针存储到变量q中去。如果p原来指向j,则q也就指向j了。

指针变量可以直接给它赋值吗?
可以,指针变量的值是存储地址,需要赋值对应类型的变量的地址;如:int a = 0;int *p;p = &a; \/\/ 赋值变量的地址 也等效于定义语句:int a = 0;int *p = &a;

指针变量赋值三种形式是什么?
指针变量赋值有三种方式:int i1、i2以及i3。1、nt *p1=&i1,*p2=i2; 用整形变量的地址给基类型为整形的指针变量赋值。2、p1=&i3; 给指针变量赋予变量的地址。3、p1=p2; 通过指针变量给指针变量赋值。存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量...

为什么c语言中* p= a是指针赋值?
c语言中*p=a是指针变量赋值语句,这种写法有两种可能意思:1.指针变量定义时的初始化赋值 int a[10];int *p=a ; \/\/这时的a是个地址,如:数组名或指针变量,表示定义指针变量p,同时,p指向地址a。 这里的*是跟随int的,用来表示p变量是int *类型。2.指针变量定义后,给指针变量所指内存中的...

能直接给指针指向的数据赋值吗?
可以,但int *p;*p=7;这样不行。因为“能直接给指针指向的数据”赋值,而这里的p还没有指向,所以不能赋值,这种指针有个名字叫“悬浮指针”,是不能给它赋值的。这样才可以:int a,*p=&a;*p=7;实际上就是使a等于了7。

C语言指针的赋值问题
int *p;p为指针,地址是未知的,如果直接赋值 p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针时注意初始化,也就是赋值。可以int *p=&a;或者int *p;p=&a;然后再对p进行操作 有错。注意大小写...

指针的赋值问题
就是说,只允许,指针地址赋值给指针地址,变量值赋值给变量值。了解这些,就可以分析了:int *p,*q; q=p; \/\/对的,因为p,q都是指针,可以相互赋值 依据 A,C原则 int a,*p,*q; p=q=&a;\/\/对的,p,q指针表示地址,根据B原则,&a也是地址,因此可以进行赋值 int a,*p,*q; q=&a...

指针变量可以由整数赋值不能用浮点赋值
因为指针本身代表的是地址,而计算机内的地址都是无符号整型,所以只能由整数赋值。但是指针所指向的变量类型并不受限制,可以是整型也可以浮点型。比如有数组a,指针p=a; p指向的就是a数组的首地址,p=a+1,那么*p=a[1]; 可以通过修改*p改变a[1]的值。

指针变量能直接赋值吗?
指针变量一般是不可以直接赋值的,因为直接赋值的话,就是让这个指针指向这个赋值的地址,万一这个地址是你计算机内部的某个程序的或者是系统的某个地址,而你对这个指针的值又改变了,那么你的计算机系统就会出现问题,可能导致系统不能正常运行活着程序出错等等。但是NULL是一个空地址,即0,它不指向任何...

新北区19349914454: 指针的赋值问题 -
淳刘济川: 指针是个存着地址的变量,因为我们每定义一个变量,内存就会给他分配空间,那么每个变量必须会有一个存储他的地方,我们称为地址,他指向谁,里面就存着谁的地址.如题*p=a; 此时p里面存的是a的地址(记住这一点),还可以用取地...

新北区19349914454: 关于指针的赋值问题 -
淳刘济川: 答案是D 这是 字符串初始化的一种方法 char *sp="right!"; 另外 char sp[]="right!"; 也可以.A char *sp;*sp="right!"; 不对 sp是一个字符指针,然后再*sp就是一个字符的意思,它不可以赋值一个字符 串.B char s[10];s="right!"; ...

新北区19349914454: 关于C语言中指针赋值的问题 -
淳刘济川: 你这样想说明你还没有真正理解内存和指针.int a;表示编译器随机取出一个空闲的地址分配给a,不妨设为00000000,长度为sizeof(int),不同编译器可能不同.int *p;也表示随机取出一个空闲的地址分配给p,不妨设为000000f0,长度一般为...

新北区19349914454: 给指针变量赋值问题 -
淳刘济川: 指针变量p如果是声明成和函数factorial类型一致的函数指针的话,直接赋值即可 p = factorial; 使用的时候,用 p(args..) 和 (*p)(args..) 调用结果是一样的,没什么区别

新北区19349914454: 指针变量赋值 -
淳刘济川: int *p = 0 ; 这个p相当于 门牌号 你现在没有门牌号 却要往人家里送信 怎么可能送到

新北区19349914454: 指针变量可以直接赋值吗 -
淳刘济川: 指针变量一般是不可以直接赋值的,因为直接赋值的话,就是让这个指针指向这个赋值的地址,万一这个地址是你计算机内部的某个程序的或者是系统的某个地址,而你对这个指针的值又改变了,那么你的计算机系统就会出现问题,可能导致系统不能正常运行活着程序出错等等.但是NULL是一个空地址,即0,它不指向任何地址,所以可以赋值为NULL

新北区19349914454: 指针变量给指针变量赋值什么意思 -
淳刘济川: 指针变量就是用来存储指针的变量.如 int i,j,*p,*q; 定义了整型变量i和一个指针变量p,i用来存放一个整数,p用来存放一个指针,但这个指针指向一个整型变量.p=&i; 则把i的地址(即一个指针)存放到变量p中,指针p就指向了变量i;同理p=&j; 则p指向了变量j.当 q=p; 时,就是指针变量p给指针变量q赋值,就是把存储在变量p中的指针存储到变量q中去.如果p原来指向j,则q也就指向j了.

新北区19349914454: c语言中指针变量的赋值方式分别为? -
淳刘济川: int i1,i2,i3; (1)int *p1=&i1,*p2=i2; 用整形变量的地址给基类型为整形的指针变量赋值(2)p1=&i3; 给指针变量赋予变量的地址;(3) p1=p2; 通过指针变量给指针变量赋值;

新北区19349914454: 关于c语言指针赋值的问题! -
淳刘济川: int a=3,b=4,*x,*y;*x=a;*y=b; 指针变量x,y没有初始化,变量里存储的是不确定的值(垃圾值),间接访问一个不确定的内存位置是非法的.所以“*x=a;*y=b;”非法.“*x=&a;*y=&b;”同样也是,这里暂时不管赋值号"="两边的类型是否兼容.int a=3,b=4,*x,*y;x=&a;y=&b;//&a、&b分别取变量a、b的地址,然后给指针变量x、y赋值.这时x指向a(x存储的a的地址),y指向b.通过*x即可访问a(*x和a等效),此时*x和a都代表同一个存储位置.因此你最后的写法是正确的.切记,在间接访问指针之前,要确保指针指向一个明确的内存位置.

新北区19349914454: C语言指针变量的赋值和做函数的参数 -
淳刘济川: 1、指针变量的赋值,分为定义时赋值(初始化)和单独赋值,如:int x ; int * px=&x ; //定义时赋值,也称初始化,注意这里的*是跟随int的,即变量px是int *类型变量! 实际上的赋值语句是px=&x ; int * py ; py=&x ; //单独赋值,将py指向x*py=...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网