C语言中指针*p=*q与p=q有什么区别
发布网友
发布时间:2022-04-30 01:44
我来回答
共5个回答
热心网友
时间:2022-06-28 07:45
答:*p=*q与p=q的本质区别在于:*p=*q操作的是变量存储的数值,p=q操作的是指针变量本身
C语言中,指针操作主要有以下三种情况:
*p 是指针变量p指向的变量a的存储内容,*p = 5;
p 是指针变量的存储内容,因为p指向a,所以p的存储内容(存储空间的值)就是系统为变量a分配的存储地址;
&p 是对指针变量p进行取地址的操作。
扩展资料:
指针的机制比较简单,其功能可以被集中重新实现成更抽象化的引用(reference)数据形别。
许多编程语言中都支持某种形式的指针,最著名的是C语言,但是有些编程语言对指针的运用采取比较严格的*,如Java一般避免用指针,改为使用引用。
有两种含义,一是作为数据类型,二是作为实体。
指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。指针一般出现在比较底层的程序设计语言中,如C语言。高层的语言如Java一般避免用指针,而是引用。
指针作为数据类型,可以从一个函数类型、一个对象类型或者一个不完备类型中导出。从中导出的数据类型称之为被引用类型(referenced type)。指针类型描述了一种对象,其值为对被引用类型的实体的引用。
C++标准中规定,“指针”概念不适用于成员指针(不包含指向静态成员的指针)。C++标准规定,指针分为两类:
1、object pointer type:指向void或对象类型,表示对象在内存中的字节地址或空指针。
2、function pointer type:指代一个函数
C中函数调用是按值传递的,传入参数在子函数中只是一个初值相等的副本,无法对传入参数作任何改动。但实际编程中,经常要改动传入参数的值。
这一点我们可以用传入参数的地址而不是原参数本身,当对传入参数(地址)取(*)运算时,就可以直接在内存中修改,从而改动原想作为传入参数的参数值。
(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。显然可以用赋值语句对内存地址赋值。
参考资料来源:百度百科-指针
热心网友
时间:2022-06-28 07:45
若p和q是申明为类型兼容的指针变量,且都正确赋有合法值且不为NULL,那么,*p=*q是把指针q指向的目标值赋给指针p指向的目标;p=q则是使指针p指向指针q指向的目标(最终是p和q指向了同一目标,这个目标就是q指向的目标)。在q==NULL时,*p=*q非法操作,p=q是合法操作(使p和q同为NULL)。综上,除q为无效(NULL)时不能取值操作外,正常情况下*p=*q操作的是指针指向的目标,p=q操作的是指针本身——这是二者的本质区别。以下代码可以验证:
#include "stdio.h"
int main(int argc,char *argv[]){
int *p,*q,a=334,b;
q=&a;
p=&b;
*p=*q;
printf("b = %d,\ta = %d\n",*p,*q);//b获得了a的值
p=q,b=123;
printf("*p = %d,\t*q = %d,\tb = %d\n",*p,*q,b);//p,q都指向了a,b值未变
q=NULL;
p=q;//NULL指针作右值是合法的
printf("p = %p,\tq = %p\n",p,q);
printf("%d\n",*p);//取NULL指针的值*p是非法的
return 0;
}
验证结果如下:
热心网友
时间:2022-06-28 07:45
*p=*q,意思是说,将q指针指向地址的值传给p指针指向的地址,此时p和q是指向不同地址的(当然是在原先p和q就不同的情况下)而p=q呢,则是说将q指针指向p指针指向的地址,此时pq指向同一位置,共享同一段内存
热心网友
时间:2022-06-28 07:46
指针指向的是一个地址,但这个地址里面可能是一个变量,也可以是个常量,或者是其它类型...
p=q只是一个变量间的传数据传递
热心网友
时间:2022-06-28 07:47
1)*q是指针所指向的一个字符,所以把一个字符串赋值给一个字符,显然是错误的.
2)C语言不进行强制的类型识别,所以一个字符可以以数值形式赋值,实际你赋值的内容是它的ASCII码,也就是'd'
3)C语言中字符串不能直接给指针赋值,而应该使用函数:strcpy,strncpy.函数原型为:
char *strcpy( char *strDest, const char *strSource );
char *strncpy( char *strDest, const char *strSource, size_t count );
4)printf函数中使用字符串时,应该直接使用指针.而不带*
5)从这句:*p=&x;来看,p是指针的指针,所以*p是指针,所以用法是正确的.
从以上分析得出几点结论:
1)C语言对数据类型不会进行强制识别,字符型数据可以赋值为数字,字符指针可以指向数字,指针本身也会有指针.
2)指针只是指的一个地址,这个地址本身也是数据.如果把这个地址当作字符串使用的话,一定要直接使用指针,如果使用形如*p这样的用法的话,只是指的p指向的首地址的字符.
Any more problems?
C语言中指针*p=*q与p=q有什么区别
答:*p=*q与p=q的本质区别在于:*p=*q操作的是变量存储的数值,p=q操作的是指针变量本身 C语言中,指针操作主要有以下三种情况:p 是指针变量p指向的变量a的存储内容,*p = 5;p 是指针变量的存储内容,因为p指向a,所以p的存储内容(存储空间的值)就是系统为变量a分配的存储地址;&p ...
C语言中,*P=*Q,*P=&Q,*P=Q有什么区别?
p=*q是把q指针所指向地址里存放的数值赋给p指针指向的地址,简单说就是把q指向的变量里的值赋给p指针指向的变量 P= &Q 是错的除非是在定义的时候可以。int *p=&q;p=q啥也不是。
c语言中 指针的指针赋值问题,void **p, void *q; p = &q,与*p= q的...
p = &q是把q的地址给p,使p指向q p= q是把q的值赋给p所指向的存储单元 画个图好理解些
C语言中有两个指针*p.*q,然后p=q,如果再有一个指针*m,把它地址给q,那...
你等于重新赋了新(地址)值,当然q变新的 值啦。p 没变,还是老的。用 %p 格式 打印地址看看就知道了:include <stdio.h> int main (){ int b=0;int *p,*q,*m;int a=3;q=&b;p=q;m=&a;q=m;printf("p=%p q=%p m=%p a=%p\n",p,q,m,&a);return 0;} ...
在c语言中*p是什么意思 *p||*q又是什么意思 求高人指点
第一个*p是什么意思:这里不能说*p是什么意思,因为在C语言中*p在不同的场合代表是不同的。比如程序开头的int *p;这句指建立一个指针型变量p;如果在程序中如 include<stdio.h> void main(){ int a,b;int *p; //建立个指向整型的指针变量p a=3;p=&a; //指向整型的指针变量可以被...
*p=*q这是什么意思?c语言指针问题
将q指向指向的地址空间的值赋值给p指向指向的地址空间
C语言问题 int *p,*q,m=5; p=&m;q=p; 请问指针q=p是什
q=p 即将p的值(地址)赋给q,操作完之后 p指向 m;q指向m 操作 *p时 *q的值也会改变
c语言的指针部分 *p与p区别
c语言的指针部分 *p与p区别如下:1、作用不同 p表示此指针指向的内存地址中存放的内容。p是一个指针变量的名字,表示此指针变量指向的内存地址。2、输出内容的格式不同 p常用在一个和指针类型一致的变量或者常量。p输出一个指针的地址,通常是输出一个16进制的数。3、效果不同 p是让编译器从指定的...
C语言 选择 求教 关于指针
int a, *p, *q, p = q = &a;是也是错误的,因为int a, *p, *q是声明语句,而p = q = &a是赋值语句,它们是不能在同一条语句中的。对于(2)我们需要知道非地址值是不能赋值给一个指针变量的,其实也就是不同类型的变量不兼容而已,因为C语言是强制类型语言。那么int a, *p, *q...
c语言,多重指针。例如int **p,intq,如果p=q,那么p=&q对吗
int **p; p是二级指针。int q; q是整型变量。那么 p=q; 本身就是不对的。p=&q一样不对。都是类型不匹配。 p二级指针, &q一级指针。 q整型变量。 这三个类型都不一样。正确做法是 int **p, *p1, q;p1=&q;p=&p1;这样类型才是对的。