c语言中取地址符和*有什么区别?
*就是取指针所指地址处保存的数值,
&就是去一个变量的地址。
&是取地址运算 对任意变量都可以进行取地址操作
如:
int i , *pi ;
pi=&i ;
int **ppi ;
ppi=&pi ;
*是取指针目标运算符 其后跟随的必须是指针类变量
如:
int i,*pi ;
pi=&i ;
*pi = 10 ; //相当于 i=10 ;
*i=10; 这样写就是错的,i不是指针类变量,所以 *i操作就是错误的语句。
不都是取地址。
1,符号含义不同:&是取地址运算符,&a为变量a的地址。
2,用法不同:声明中 int x; x 是整型量。
语句中,&x 是整型量x的地址。不是指针,才有&。
语句中,x 是整型量x的值。
3,指向不同:*是指针运算符,*p为指针变量p所指向的存储单元中的内容。而指针变量p中一般只存放地址。* 表示指针,例如: int *p; -- p 是指针,指向整型量。
语句中,*p 表示指针指向的整型量的值。
语句中,p 表示指针指向的地址。
语句中,没有 &p 形式,如果p是指针。
扩展资料
*空指针,*野指针
在函数内部对指针进行赋值操作后,在函数执行完毕后,该指针就成了一个空指针(变量从栈中弹出)。但是通过动态地址分配(堆空间)的指针不会有上述问题。
free(p)后释放内存的指针为野指针。
指针(pointer)是对数据对象或函数的一种引用。指针有多种用途,例如定义“传址调用”函数,它还可以实现动态数据结构,例如链表和树。
通常,管理大量数据的有效方法不是直接处理数据本身,而是使用指向数据的指针。例如,如果需要对大量的大型记录进行排序,对指向该记录的指针列表进行排序效率要比直接对记录排序高得多,因为这样无需在内存中移动数据。
类似地,如果需要把大型记录传入函数,传递指向该记录的指针会比直接传递记录本身更经济,即使函数不需要修改该记录。
指针代表了一个对象或函数的地址和类型。如果一个对象或函数具有 T 类型,那么指向它的指针就具有一个衍生出的指向 T 的指针类型(pointer to T)。
例如,如果 var 是一个 float 变量,那么表达式 &var(其值是该 float 变量的地址)属于指向 float 的指针类型,按照 C 语言表达,就是 float* 类型。
指向任何 T 类型的指针也被简称为 T 指针(T point)。因此,&var 中地址运算符会生成一个 float 指针。
因为 var 没有在内存中移动位置,所以表达式 &var 是一个常量指针。然而,C 也允仵使用指针类型来定义变量。指针变量存储的是另一个对象或函数的地址。
我们后面会进一步讨论指向数组和函数的指针。首先,看看如何声明指向非数组对象的指针,语法如下:
类型 * [类型限定符列表] 名称 [= 初始化器];
在声明中,星号(*)表示“指向的指针”。标识符“名称”被声明为一个对象,其对象类型为“类型”,也就是“指向‘类型’的指针”。类型限定符为可选择项,可能包含 const、volatile 和 restrict 的任意组合。
参考资料
百度百科——指针
c语言中取地址符和*有两点区别:
一、p指令:
声明中: * 表示指针,例如: int *p,p是指针,指向整型量。*p表示指针指向的整型量的值。
语句中,p表示指针指向的地址。如果p是指针,没有 &p 形式。
二、 x指令:
声明中:x是整型量。&x是整型量x的地址,不是指针。
语句中:x是整型量x的值。&另一用途是按位运算符,按位* 是乘号。
扩展资料:
C语言中常见符号的作用:
1、 ? x:y,类似于if语句,例如: x>9?50:100; 意思是x是否大于9 ,是的话就输出50,不是的话就输出100。
2、c语言中,!的作用是逻辑非,例如:!a 凡是a不等于0,那么输出都是0,只有当a等于0时,输出的才是0。!=意思是不等于,一般应用与判断 if(a!=b)。
3、c语言中,&&表示逻辑且(交集) ,||表示逻辑或(并集)。实际上两者也是用来输出正确与错误,也就是输出0或1,判断的意思。
区别如下:
(1)两者根本意义不同。*是指针的意思,而&是去地址的意思,这两个相辅相成。
(2)用法不同。高级的c语言都是动态开辟内存,是使用malloc和free,这时就不用&了,因为取引用都是对于栈上的数据,在数据结构中,都是在堆上开辟数据容量。
(3)语言规则不同,变量类型加*就是一个指向该变量类型的指针,通俗点说,指针就是可以通过地址修改和获取该变量的值,而&符号只是获取该变量的地址!
指针中的“取地址符”
扩展资料:
引用的声明符放置在变量名的前面,和*操作符的用法一样。
引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。 ra=1; 等价于 a=1;
声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。
故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
#include<iostream> using namespace std; int main()
{ int m[10]={1,2,3,4,5,6,7,8,9,10}; int (&n)[10]=m; for(int i=0;i<10;i++) cout<<m[i]<<' ' ;
cout<<endl; for( i=0;i<10;i++) cout<<n[i]<<' ' ; cout<<endl; return 0;}
例如:
int*pointer;//建立一个指针
int*&p1=pointer;/*
正确,编译系统把"int*"看成一体,把"&p1"看成一体,即建立指针pointer的引用,就是给指针pointer起别名p1。
int&*p2=pointer;//错误,这就变成了引用的指针。
参考资料:&(C的位运算符)_百度百科
c语言中取地址符&和指针*的区别:
1、功能不同
&是一元运算符,取变量地址。
*作为标识符,定义变量为指针。
2、含义不同
&是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址。
*是一个无符号整数,这个整数指向某个内存地址,一次访问sizeof(type)长度。
3、指向不同
&p指向变量a的地址。
*p为指针变量p所指向的存储单元中的内容。
4、用法不同
&声明中 int x; x 是整型量,&x 是整型量x的地址。不是指针,才可以使用&。
*x 声明时指示后面的变量是指针变量,且其基类型是前面的类型,使用时把地址转向所指向的变量。
参考资料来源:百度百科——指针
百度百科——地址计算
两者区别在于操作对象。
操作对象的不同:取地址运算符&,对任意变量都可以进行取地址操作;*是取指针目标运算符,其后跟随的必须是指针类变量。
扩展资料:
指针变量可以进行加减运算,例如p++、p+i、p-=i。指针变量的加减运算并不是简单的加上或减去一个整数,而是跟指针指向的数据类型有关。
给指针变量赋值时,要将一份数据的地址赋给它,不能直接赋给一个整数,例如int *p = 1000;是没有意义的,使用过程中一般会导致程序崩溃。
使用指针变量之前一定要初始化,否则就不能确定指针指向哪里,如果它指向的内存没有使用权限,程序就崩溃了。对于暂时没有指向的指针,建议赋值NULL。
两个指针变量可以相减。如果两个指针变量指向同一个数组中的某个元素,那么相减的结果就是两个指针之间相差的元素个数。
数组也是有类型的,数组名的本意是表示一组类型相同的数据。在定义数组时,或者和 sizeof、& 运算符一起使用时数组名才表示整个数组,表达式中的数组名会被转换为一个指向数组的指针。
参考资料:百度百科-指针:*和&
c语言中取地址符和*有什么区别?
两者区别在于操作对象。操作对象的不同:取地址运算符&,对任意变量都可以进行取地址操作;*是取指针目标运算符,其后跟随的必须是指针类变量。
C语言 中&和 *分别是什么意思?
&是取址运算符,作用是提取一个变量的地址。比如你定义了一个变量,那么在编译时,系统就会在内存中分配一个空间。而这个空间在内存中的位置就是它的地址。&就提取它的地址。e.g int a;在编译时就给它分配一个地址,比如是2000;&a就是2000。假如先定义了一个整型指针变量p,p=&a;就是把a的...
c语言中取地址符和*有什么区别?
1,符号含义不同:&是取地址运算符,&a为变量a的地址。2,用法不同:声明中 int x; x 是整型量。语句中,&x 是整型量x的地址。不是指针,才有&。语句中,x 是整型量x的值。3,指向不同:*是指针运算符,*p为指针变量p所指向的存储单元中的内容。而指针变量p中一般只存放地址。* 表示指...
c语言 &与*的具体区别
&是取地址符号,既取得某一个变量的地址;如:&a 而* 是指针运算符(乘号就不说了),可以表示一个变量是指针类型;也可以表示一个指针变量的所指向的存储单元,可以获取某个地址存储的值。
在c语言中,&和*有什么区别?
c语言中&&与&区别为:性质不同、判断依据不同、结果类型不同。一、性质不同 1、&&:&&是逻辑操作符,表示为“逻辑与”。2、&:&是按位操作符,表示为“按位与”。二、判断依据不同 1、&&:&&的判断依据是x和y均为true,取值是true,否则取值是false。2、&:&的判断依据是将x和y两个数转...
c语言中*与&各代表什么意思
&: 在C语言中有两种意思,一种是取地址符,是单目运算符;另一种是位运算符,表示“按位与”,是双目运算符。|: 是位运算符,表示“按位或”。资料扩展1、符号 & 和 | 这两个运算符都是二进制的按位操作符。&: 二进制“与”(都为1时,结果是1,否则是0。),比如:1010 & 1011 = 1010...
c语言中关于*和&的意思理解
代表指针运算符和乘法运算符;&代表取地址,与运算符,引用符。用于二目运算中的按位(位运算)与运算:单目是只需要一个操作数的意思,比如:a++ a-- *a &a 双目是需要两个操作数的意思,比如:a+b a-b a*b a\/b a%b 三目是需要三个操作数的意思,比如:a=c>b?c:b;例如...
C语言中取地址的符号都有哪些???
1. 在C语言中,取地址的运算符是`&`。2. 当声明一个指针变量时,如`int *p;`,其中的星号(`*`)表示p是一个指向整型的指针。3. 赋值操作中,如`*p = 123;`,`*p`表示指针p所指向内存地址的内容,而不是地址本身。4. 在表达式中,如`k = *p + 456;`,`*p`表示的是指针p指向的内存...
初学C语言,*是取指针目标运算符,&是取地址运算符,它们有什么区别...
&是取地址运算 对任意变量都可以进行取地址操作 如:int i , *pi ;pi=&i ;int **ppi ;ppi=&pi ;是取指针目标运算符 其后跟随的必须是指针类变量 如:int i,*pi ;pi=&i ;pi = 10 ; \/\/相当于 i=10 ;i=10; 这样写就是错的,i不是指针类变量,所以 *i操作就是错误的...
c语言中& *的用法
&是一个位运算符。&&是一个逻辑运算符。2.作用不同。&是将两个二进制的数逐位相与,结果是相与之后的结果。&&就是判断两个表达式的真假性,只有两个表达式同时为真才为真,有一个为假则为假,具有短路性质。3.用途限制。&除了是一个位运算符,也是取地址符。&&就是一个单纯的逻辑运算符,没有...
易骆法布: &是取地址运算 对任意变量都可以进行取地址操作 如: int i , *pi ; pi=&i ; int **ppi ; ppi=&pi ; *是取指针目标运算符 其后跟随的必须是指针类变量 如: int i,*pi ; pi=&i ; *pi = 10 ; //相当于 i=10 ; *i=10; 这样写就是错的,i不是指针类变量,所以 *i操作就是错误的语句.
甘泉县18065164844: c语言中取地址符和*有什么区别? - ?
易骆法布: 不都是取地址,简单说一下,希望你能明白: &是取地址运算符,&a为变量a的地址. *是指针运算符,*p为指针变量p所指向的存储单元中的内容.而指针变量p中一般只存放地址.
甘泉县18065164844: C语言中&是什么意思?a&b怎么理解? - ?
易骆法布: &: 在C语言中有两种意思,一种是取地址符,是单目运算符;另一种是位运算符,表示“按位与”,是双目运算符. a&b表示啊a和b按位进行与运算. &后面是个变量.每个变量对应一块存储空间.每个存储空间有一个编号,也就是地址,&...
甘泉县18065164844: 数据结构中的*和&的区别和含义 - ?
易骆法布: 严、吴版的数据结构中*是取地址内容,和C语言用法一样.而&的用法有两种,一种是取地址运算符,和C语言的一样,另一种是引用,参考了C++的用法.详情可找本C++的书看看.在纯C编译器里引用是不被支持的.
甘泉县18065164844: c语言中的*与&是什么意思? - ?
易骆法布: *是指针运算,&是取地址.*后面必须是指针变量,&后面则什么变量都可以(除了常数).c语言C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需...
甘泉县18065164844: &在c语言中什么意思 - ?
易骆法布: 主要有两个意思: 1. 取地址符,用在指针表达式或输出变量地址时 例如 int a; &a就是表示变量a在内存中地址 2. 二进制位与位运算符 1&1=1 0&0=0 拓展资料:C语言主要特点: 1. C语言是高级语言.它把高级语言的基本结构和语句与低级...
甘泉县18065164844: C语言中取地址的符号都有哪些??? - ?
易骆法布: & 是 取地址的运算符号 int *p; -- 这个 星号 只是声明,表示 p 是指针. *p = 123; k = *p + 456; -- 语句里出现 *p 这个形式,不同于声明中的这个形式.(外貌一样,意思不同)这个 *p 相当于 值,不是地址. 语句里出现 p 才是地址.声明为指针的p,没有 &p 形式! int x; 声明x是简单变量.(当然不是指针) &x -- &是 计算地址,&x 是 x 的地址. (简单变量才有 &x)
甘泉县18065164844: c语言中,*pil和pil之间区别是什么 - ?
易骆法布: 如果先定义了 int pil 那么pil是用来存放整形变量的 而 int *pil 那么pil就是指针...也就是说 pil是用来存放地址变量的.. *是地址运算符, *pil表示pil里面存放的地址所指向的变量 举个例子 int a; int *pil; 定义了一个整形a变量 pil = &a; &是取地址符 就是把a的地址赋值给pil 通俗的说 假设a的地址是 123(只是假设 当然不是这样), a存放的数据是100 那么 执行pil =&a 后 pil就=123, 而*pil 就表示123所指向的变量, 此时相当于 *pil = a 也就是说 *pil 等于a 等于100
甘泉县18065164844: c语言中 “*”运算符的作用是 所谓“指针”就是 - ?
易骆法布: *运算在C语言中,有两种作用: 1 用作乘法,为双目运算符,形式为a*b, 就是计算数学中的a乘以b. 2 用作取值运算,为单目运算符,根据后续操作数(必须为指针)类型,取其指向的值.所谓的指针,本质上就是地址. 指针变量的值,就是地址的值,当取值运算时就是到对应的内存地址上,依照指针类型进行取值.
甘泉县18065164844: c语言函数参数里的取地址符号是什么意思 - ?
易骆法布: 就是找到这个变量的内存地址,直接读写 例如:scanf("%d",&a); 就是找到a的地址,把读入一个数写到a 的地址中 在例如 p=&a; 就是让指针p指向a的内存地址,这样直接对内存读写.有利于提高操作速度.