指针的赋值问题?怎么给一个指针赋值
本文目录
指针的赋值问题
指针是个存着地址的变量,因为我们每定义一个变量,内存就会给他分配空间,那么每个变量必须会有一个存储他的地方,我们称为地址,他指向谁,里面就存着谁的地址。如题*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 原则ACint a=20,*p,*q=&a *p=*q;// 对的,初始时q得到a的地址,*p和*q都是表示值,符合原则Cint a=20,*p,*q=&a p=q;//对的,原则BCint p,*q; q=&p// 对的,原则BC祝你进步,指针自己琢磨下,会明白的!
怎么给一个指针赋值
指针其实就是内存地址。使用指针可以深入硬件底层。可以用&运算符将变量的地址取出。赋予指针。inta=5,int*p=&a数组中,数组名表示数组的起始地址。因此可以将数组名赋予指针。intarry;int*p=array;还有动态分配内存时。int*p=newint,classA*p=newClassA();也是在运行时堆中分配指定大小的内存块。并把内存块起始地址赋予指针变量p.简单的应用就是这样。复杂的指针应用比如函数指针等。说白了还是地址。用来实现类似于C#委托功能。用久了自然会清晰了。在指针的运算中。编译器会自动计算地址增加量。比如针对p++后;int型的指针的值:当前地址+sizeof(int)。内存是按字节编址的。classA类型的指针的值:当前地址+sizeof(classA)。对其解引用后*p指向的就是下一个元素的值。比如对于数组指针。*array=array*(array+1)=array;
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;
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改动该字符串的值,由于该字符串为常量,而它仅仅是简单的将指针指向该字符串常量。
c语言 指针如何赋值
指针的赋值 int*p; inta; intb; p=&a p=b; 指针的赋值,“=”的左操作数可以是*p,也可以是p。 当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据; 当“=”的左操作数是p时,改变的是p所指向的地址。 数组的变量名b表示该数组的首地址,因此p=b;也是正确的. 同类型的指针赋值: intval1=18,val2=19; int*p1,*p2; p1=&val1 p2=&val2 p1=p2;//注意啦,p1指向了val2,而没有指向val1
指针变量的赋值
我想你的t是指针,t=0,意思是说指针t指向0这个位置,*t=100意思是说t指向的位置的值是100这里要分清两个地址,指针地址(可以用数字表示比如前面的t=0,得有地方放指针阿)和指针指向的地址(也就是说*t=100之前t是有指针地址的,这个指针地址所指向的位置叫做指针指向的地址,*t=100是把这个指针地址所指向的一块地方存储100这个数字)解释的够清楚了
(C语言)地址为什么要变成指针才能赋值给指针变量呢
指针即地址。所以您的问题问的不对。
我所理解的应该是想问为什么变量需要取地址以后再赋值给指针变量,即int a,*p; p=&a
先讲个小概念,数字23,在“今年我23岁了”这句话中23的语义是年龄;在“我的偶像身穿23号篮球服”这句话中23是篮球服的编号。也就是说数字23在不同的语句环境中语义不一样。
回归正题,int a,*p; p=&a 在这里我们定义了两个整形变量,在内存中他们都存放的是二进制编码,但是他们的语义是不一样的,一个用来存放整数,一个却是用来存放指向一个整形变量的指针(指针即地址)。简单说这两个变量可不一样,一个是普通变量存放常用的数值,一个是特殊变量(所以还要加个*号区分一下)存放另外一个变量的物理地址。
这么讲您能明白嘛?不明白的话可以再邀请我回答这个问题。
更多文章:
![intele5300多少钱(买个intel奔腾 e5300的CPU多少钱)](/static/images/nopic/14.jpg)
intele5300多少钱(买个intel奔腾 e5300的CPU多少钱)
2024年4月17日 15:05
![i3530与i7870(联想Evr1.0主板 可以用什么CPU)](/static/images/nopic/14.jpg)
i3530与i7870(联想Evr1.0主板 可以用什么CPU)
2023年1月20日 08:45
![家用洗碗机的优缺点(洗碗机有哪些优缺点真的省力省时还是夸大效果)](/static/images/nopic/15.jpg)
家用洗碗机的优缺点(洗碗机有哪些优缺点真的省力省时还是夸大效果)
2024年6月1日 05:08
![lenovo联想官方网站驱动下载m7206(M7206和那个打印机用一样的驱动)](/static/images/nopic/25.jpg)
lenovo联想官方网站驱动下载m7206(M7206和那个打印机用一样的驱动)
2024年5月20日 12:04
![联想投资官网(18家媒体宣传后,联想又实施两项行动,能扭转局面吗)](/static/images/nopic/26.jpg)
联想投资官网(18家媒体宣传后,联想又实施两项行动,能扭转局面吗)
2023年3月4日 14:45