⑴ c语言,p1=NULL,p2=NULL,等价于p2=p1=NULL,对吗
看处于什么情况.
赋值的时候 是可以这样等效的.
但定义的时候不可以
比如
typedef char * CHARP;
CHARP p1=NULL, p2=NULL;
这时就不可以写作
CHARP p1=p2=NULL;
这样了.
⑵ c语言中 int a,int *p1,int *p2; p1=&a; p2=p1; 这时候p2是指
可以这么去理解:
p1=&a;//表示p1指针指向a的地址,指针的作用就是为了“指向一个地址”
p2=p1;//p2指针“等于”p1指针,就是p2做了跟p1一样的事——指向a的地址
⑶ c语言中p2=str+strlen(str)-1是什么意思
1、这里str是字符串数组名,这里当指针用;strlen(str)-1是求出字符串str的长度再-1,其值就将长度变成了下标值。
2、str+strlen(str)-1就求出了字符串数组最后一个有效位('\0'前面的那个)的地址;p2=str+strlen(str)-1就是把这最后一位的地址(指针)赋给指针p2。换句话说,就是让指针p2指向字符串str的最后一个有效字符。
⑷ 51单片机c语言中 P2&=0x0F; P2|=(1<<4+c); 是什么意思
P2&=0X0F;就是 P2=P2&0X0F;就是将高4位清空;
P2|=(1<<4+c); 等效于:P2=P2|((1<<(4+c));就是将P2的第4+c位 赋值1;
⑸ C语言中*p1=*p2与p2=p1有什么区别都是指针型~谢谢啦
*p1=*p2是把p1指向的变量的值改变,但p1所指向的变量不变,p1=p2,则是p1指向改变了,即p1不再指向原变量的地址,改为指向p2所指向的地址。
⑹ C语言中 P2=~(1<<i) 是什么意思 =~ 是什么样的运算 <<是什么运算
<<是按位左移运算,~是按位取反运算,=是赋值运算。
P2=~(1<<i)的意思是把1换成二进制数,然后左移i位,再按位取非,将结果赋给P2,等价于P2=(~(1<<i))。
比如i为3。那么P2= ~(1<<i) = ~(1<<3) 。
先按1个字节来看,1的二进制为00000001,左移3位得到00001000。取反得到11110111,即十六进制的F7。
如果整数为4个字节,那么P2= ~(1<<3) = 0xFFFFFFF7。
⑺ 单片机C语言中p2=0xFF,0xFF什么意思
0x是16进制的前缀,16进制是计算机中数据的一种表示方法;
十六进制的0xFF就是二进制的11111111,换算成十进制就是255;
十进制表示法不一样,是逢16进1,它由0-9,A-F组成,字母不区分大小写,例如10用16进制表示就是A;
P2=0xFF,就是将P2.0~P2.7全部设为1,也就是P2=11111111,当然就不是P2=0x01;
(7)c语言p2等于什么扩展阅读
单片机c语言XBYTE的使用
使用keil开发单片机程序时,在absacc.h这个头文件中,有XBYTE这样一个宏。它的定义是#defineXBYTE((unsignedcharvolatilexdata*)0)可以使用XBYTE去访问外部的RAM,也可以用XBYTE去访问扩展的I/0设备;
关于I/O的控制如下,低字节表示的是P0端口,高字节表示的是P2端口,P2端口通常作为控制端口,而P0通常作为数据端口;eg:XBYTE[0x8800]=buz_stu;其中用P2做控制,P0的数据就是buz_stu的状态。
注意:这里是利用的英特尔总线进行访问的,那么就会有时序的问题,在C语言中,这些都帮你做完了,所以无需考虑