c语言 指针如何赋值?C语言指针的赋值问题

本文目录
c语言 指针如何赋值
指针的赋值
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
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改动该字符串的值,由于该字符串为常量,而它仅仅是简单的将指针指向该字符串常量。
指针变量的赋值
我想你的t是指针,t=0,意思是说指针t指向0这个位置,*t=100意思是说t指向的位置的值是100
这里要分清两个地址,指针地址(可以用数字表示比如前面的t=0,得有地方放指针阿)
和指针指向的地址(也就是说*t=100之前t是有指针地址的,这个指针地址所指向的位置叫做指针指向的地址,*t=100是把这个指针地址所指向的一块地方存储100这个数字)
解释的够清楚了
怎么给一个指针赋值
指针其实就是内存地址。
使用指针可以深入硬件底层。
可以用&运算符将变量的地址取出。赋予指针。int
a=5,int*
p=&a
数组中,数组名表示数组的起始地址。因此可以将数组名赋予指针。int
arry;int*
p=array;
还有动态分配内存时。int*
p=new
int,classA
*p=new
ClassA();也是在运行时堆中分配指定大小的内存块。并把内存块起始地址赋予指针变量p.
简单的应用就是这样。
复杂的指针应用比如函数指针等。说白了还是地址。用来实现类似于C#委托功能。用久了自然会清晰了。
在指针的运算中。编译器会自动计算地址增加量。
比如针对
p++后;
int型的指针的值:当前地址+sizeof(int)。内存是按字节编址的。
classA类型的指针的值:当前地址+sizeof(classA)。
对其解引用后*p指向的就是下一个元素的值。比如对于数组指针。*array=array
*(array+1)=array;
指针的赋值问题
指针是个存着地址的变量,因为我们每定义一个变量,内存就会给他分配空间,那么每个变量必须会有一个存储他的地方,我们称为地址,他指向谁,里面就存着谁的地址。如题*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
祝你进步,指针自己琢磨下,会明白的!

更多文章:
三只松鼠模特回应辱华手势是舞蹈动作,这一动作为何会引发极大争议?有什么宠物可以养除了猫和狗
2026年10月15日 04:00
福利软件仓库破解软件(请问哪里可以下载到漫番漫画无限阅币破解版)
2026年10月15日 03:45
在word如何统计图片数量?请问如何统计一个大文件夹下分文件夹下所有图片的数量呢
2026年10月15日 03:15
奥迪养车无忧plus可以修发动机吗?养车无忧真的好么,不想去4S我都不知道要去哪做保养了
2026年10月15日 02:30
比亚迪led应用工厂是外包工厂吗?有什么企业能够提供可以提升产品研发效率的数字化改造方案
2026年10月15日 02:00






