我理解的是&是取地址,也就是说&a是取a的地址,那么p=&a也就说p里面存放的就是a的地址。
*p=&a那么就是*p是a的值,p还是a的地址
那么为什么不直接写p=a呢?
不知道我理解的对不对,如果有更合理更深度的理解,欢迎补充。
问题补充,如果没有&a这个前提,a=5,此时*p=a是什么意思
*代表指针运算符和乘法运算符;&代表取地址,与运算符,引用符。
用于二目运算中的按位(位运算)与运算:
单目是只需要一个操作数的意思,比如:a++ a-- *a &a
双目是需要两个操作数的意思,比如:a+b a-b a*b a/b a%b
三目是需要三个操作数的意思,比如:a=c>b?c:b;
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
扩展资料
运算符的使用
1、当需要初始化指针,以指向某些对象或函数时,需要获得这些对象或函数的地址:
floatx,*ptr;
ptr=&x;//合法:使得指针ptr指向x
ptr=&(x+1);//错误:(x+1)不是一个左值
2、当已具有一个指针,并且希望获取它所引用的对象时,使用间接运算符*(indirectionoperator),有时候这会被称为解引用运算符(dereferencingoperator)。它的操作数必须是指针类型。如果ptr是指针,那么*ptr就是ptr所指向的对象或函数。如果ptr是一个对象指针,那么*ptr就是一个左值,可以把它(即*ptr)当作赋值运算符左边的操作数:
floatx,*ptr=&x;
*ptr=1.7;//将1.7赋值给变量x
++(*ptr);//并将变量x的值加1
参考资料来源:百度百科—运算符
这里面的前提是这样的,
typedef struct
{
char name[20];
float score;
}STD;
typedef struct
{
STD *data;
int listSize;
int length;
}sqlist
然后书上写道:
例如:
sqlist L,*p=&L;
请问这里是你说的二极指针么?
sqlist L, *p=&L;
这条语句是变量定义,这里的*是修饰符,表示p是一个指针,指向L的地址。这并不是二级指针。二级指针如下:
int **p; //*是修饰符,表示p是二级指针
int a = 1;
*p = &a; //这里*是运算符,表示取p的值(这个值是一个指针)
你的意思是说,使用指针必须先定义指针变量*p,然后下面我的p不用加*号已经是一个指针了?那么我该如何用指针表示出a的地址,还是说表示不了?
还有 如果没有&a这个前提。只是int a=5,此时*p=a是什么意思?
你记住了,指针也是一个变量。没啥难度的。。什么是变量。在内存里开辟一个空间,内存是按字节(8bit)分的,一个int是八个字节,一个float是XX个字节。。PS:这个字节数是根据OS位数和编译器而定。如果是指针变量,那它就是存储地址的。例如:0x10b005b..这一种。int *p;就是一个变量,他在内存里面是八个字节(64bitOS)。但是这样定义不好,因为没有指向东西的指针叫野指针。这个不安全。至于里面放什么东西(内存)就看你了,例如int a = 90; int *p; p = &a;就是把a的地址给p了。*p就等于a(也就是90)。跟指针有关的还有->。。指针一般和结构体,数组,函数,结构体数组 结合使用:
(摘自百度知道):
float(**def)[10] double*(*gh)[10] double(*f[10])() int*((*b)[10])
我都说了*p =a是错误的,根本没这种写法好不好??int类型的怎么可能直接赋值给指针类型?用强转可以,不过意思从根本上发生变化。