*a是a的值,&a是地址。那么a是值加地址?
那么b=a和b=*a;有啥区别?
前者是直接b指向a,后者是b新开空间再复制a的值吗?
那么*a=b;就是复制b的值到a的位置?
a是一个变量 &a是存储a的地址 假如a存储的是地址,即a是指针变量,则*a是a所储存地址的值,
a叫做数组名,是数组首元素的地址,也就是&a[0]的值。像是一个指针类型,是一个int型的指针类型,int *。
如果单纯int *a和int a[]的区别的话,int *a为指向一个整形的指针。而int a[]为一个整形数组,而数组名为其第一个元素的首地址,他们一个是形参,一个是实参
http://developer.51cto.com/art/201504/472311.htm
*a是值,a是指针,&a是地址
不管任何时候a是一个变量,标识这个变量的值,&a表示取这个变量的内存地址,*a表示取出内存地址为a中的值
举例说
a标识一个人
b = &a 取一个人的地址
*b 取一个地址是b的人
如果a是普通变量
a就是本身,&a得到地址,*a不合法
如果a是指针
a是本身这个指针,&a,得到指针的指针,也就是指针所在的地址。*a得到a指向的变量。
如果a是数组
a即是数组,也是数组首地址的指针,&a和a相同,*a则是数组首个元素的值。
int a;表示一个内存空间,这个空间用来存放一个整数(int);
int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间;
*a是a的值,&a是地址。那么a是值加地址?
这个我说了,要看a本身是什么,它是指针的话,那么*a是值(不是a的值,而是a指向的值),&a是a的地址,对于a指向的变量来说,是地址的地址。
那么b=a和b=*a;有啥区别?
这个要看a和b分别是什么类型。如果a是指针,b也是指针,前者成立,如果a是指针,b是值类型,后者成立。
前者是直接b指向a,后者是b新开空间再复制a的值吗?
任何情况下,都不会分配空间,c不能保证b = *a一定合法。如下代码;
int *a = NULL;
int b = *a; //因为a没有分配空间,所以这里出错。
那么*a=b;就是复制b的值到a的位置?
同样的道理,如果
int *a = NULL;
*a=b; //因为a不合法,所以这里也不行。正确写法
a = (int *)malloc(sizeof(int)); //分配空间
*a = b;
int c的是定义用的,下边用的*c表示c指向的内存地址存储的值。
当我们定义一个数组a时,编译器根据指定的元素个数和元素的类型分配确定大小(元素类型大小*元素个数)的一块内存,并把这块内存的名字命名为a。名字a一旦与这块内存匹配就不能改变。a[0],a[1]等为a的元素,但并非元素的名字。数组的每一个元素都是没有名字的。
这里&a[0]和&a到底有什么区别呢?a[0]是一个元素,a是整个数组,虽然&a[0]与&a的值一样,但其意义不一样。前者是数组元素的首地址,而后者是数组的首地址。以指针的形式访问和以下标的形式访问时,记住偏移量的单位是元素的个数而不是byte数,在计算新地址时千万别弄错了。
如果单纯int *a和int a[]的区别的话,int *a为指向一个整形的指针。而int a[]为一个整形数组,而数组名为其第一个元素的首地址,他们一个是形参,一个是实参,形参指向实参的地址,上面的程序错了,和这两个参数没关系,将Fun含数的第二行改为for (i=0; i<n-1; i+=1)即可实现从大到小的排序。
b=a如果b和a都是变量,这就表示一般的赋值,a的值赋给b但是各自的地址不相同;
b=*a b是变量,*a是指针指向的值,可以理解和b=a一样都是只是赋了值各自的地址没有改变
当定义 比如 int*a,*b;
a=b;这可以表示a指向b,b的地址给了a
a就是一个很普通一个变量 可以是任意类型 int float double 等等
然后&a 就是表示的是变量a的地址
*a的意思就是 首先定义一个指针 比如 int * a; 这个*a就表示这个a指向地址里面的值
如果a b是两个变量 那么a=b就是把b的值赋给a 而要是b=*a成立 则a指向地址 *a就是这个地址里面的值,b=*a就是把这个地址里面的值赋给b
*a=b就是把b的值赋给a指向地址里面的值
如果定义a为指针变量,那么*a是一个数值;a是普通变量,&a是个地址;若a是数组,*a是0行0列元素的地址;&a是它的首地址;
b=a(普通变量)就是将a的值赋给b;b=*a(a为指针)就是将一个数赋给a;*a=b是指针a指向b。具体看如何定义a.
其实这个得具体分析,像你说的b和a的关系,还没设定b和a的类型,就会迷糊了
简单来说,int a a就是一个变量,如果int b ,那么b=a就是赋值,涉及大小,跟ab的位置都无关。如果是int * b,那b此时是一个指针了b=&a才对,此时a=* b