C语言指针符号问题?
现在学C语言到指针,可是我总是不理解什么时候应该在指针变量前面加“*”,什么时候不加,所以想问下有没有什么办法不要把这个东西弄混?...
现在学C语言到指针,可是我总是不理解什么时候应该在指针变量前面加“ * ”,什么时候不加,所以想问下有没有什么办法不要把这个东西弄混?
展开
11个回答
展开全部
指针变量和普通变量没有什么区别,指针32位四字节,里面保存的是一个内存空间的地址,就像一个整形变量int a, a就可以代表一个整数,一个指针变量int* p,p就可以代表一个地址数据,而*地址,代表去这个地址指向的内存空间取出里面的内容,因此如果是要取出这个指针所指向的内存里面的内容就是*p,而如果是需要获得那个内存的地址,或者让另外一个指针指向这个空间时,就可以使用int* pb;pb=p;
&变量名这是获取保存这个变量的内存空间地址
应该说c语言是门十分灵活的语言,类型几乎可以说无所谓了,有的只有内存和读取的方式,什么几级指针,都没有意义,就算是一整形,只要强转,也可以当作地址数据来用,只是可能会段错误,因为没有做地址映射
有的时候确实不太好理解,不过这个随着时间的积累,慢慢会理解的
&变量名这是获取保存这个变量的内存空间地址
应该说c语言是门十分灵活的语言,类型几乎可以说无所谓了,有的只有内存和读取的方式,什么几级指针,都没有意义,就算是一整形,只要强转,也可以当作地址数据来用,只是可能会段错误,因为没有做地址映射
有的时候确实不太好理解,不过这个随着时间的积累,慢慢会理解的
展开全部
定义指针变量的一般形式为:
基类型 *指针变量名;
下面都是合法的定义:
float *pointer_1; //pointer_1是指向float型变量的指针变量
char *pointer_2; //pointer_2是指向字符型变量的指针变量
可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量。
如:
pointer_1=&i;
pointer_2=&j;
在定义指针变量时要注意两点:
(1)指针变量前面的“*”,表示该变量的类型为指针型变量。
例: float *pointer_3;
指针变量名是pointer_3 ,而不是* pointer_3 。
(2)在定义指针变量时必须指定基类型。
需要特别注意的是,只有整型变量的地址才能放到指向整型变量的指针变量中。
下面的赋值是错误的∶
float a;
int * pointer_1;
pointer_1=&a;/* 将float型变量的地址放到指向整型变量的指针变量中,错误 */
请牢记,指针变量中只能存放地址(指针),不要将一个整数(或任何其他非地址类型的数据)赋给一个指针变量。
这样你明白了吗?不明白再追吧!!!
基类型 *指针变量名;
下面都是合法的定义:
float *pointer_1; //pointer_1是指向float型变量的指针变量
char *pointer_2; //pointer_2是指向字符型变量的指针变量
可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量。
如:
pointer_1=&i;
pointer_2=&j;
在定义指针变量时要注意两点:
(1)指针变量前面的“*”,表示该变量的类型为指针型变量。
例: float *pointer_3;
指针变量名是pointer_3 ,而不是* pointer_3 。
(2)在定义指针变量时必须指定基类型。
需要特别注意的是,只有整型变量的地址才能放到指向整型变量的指针变量中。
下面的赋值是错误的∶
float a;
int * pointer_1;
pointer_1=&a;/* 将float型变量的地址放到指向整型变量的指针变量中,错误 */
请牢记,指针变量中只能存放地址(指针),不要将一个整数(或任何其他非地址类型的数据)赋给一个指针变量。
这样你明白了吗?不明白再追吧!!!
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当你想保存一个地址的时候不加 *:
Int a = 0;
p = &a;
当你想取指针里的值的时候加 * :
int b;
b = *p; ==> b = *(&a) ==> b = 0; // 就是说把a地址保存的值取出来。
当*p的值还是指针的时候:
int *p = NULL;
int *q = NULL;
int a = 0,b =1 ;
q = &a;
p = &q;
*p= &a; // 结果就是q 指向a , p指向q; (*(*p)) 等于 0;
p= &a; // 结果就是p指向a; q 也指向a; p
Int a = 0;
p = &a;
当你想取指针里的值的时候加 * :
int b;
b = *p; ==> b = *(&a) ==> b = 0; // 就是说把a地址保存的值取出来。
当*p的值还是指针的时候:
int *p = NULL;
int *q = NULL;
int a = 0,b =1 ;
q = &a;
p = &q;
*p= &a; // 结果就是q 指向a , p指向q; (*(*p)) 等于 0;
p= &a; // 结果就是p指向a; q 也指向a; p
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我就给你说点简单的。当你定义一个变量时如果加了“ * ”,那么就是定义的一个指针变量。
比如 int *a,就是定义了一个整型的指针。而在下面程序调用的时候直接用 b=2,a=&b这样的等式来调用表示把b的地址赋给a,而调用的时候用*a的话就是读取存在a里面的地址上的值,这里的a里存的是b的地址,所以*a的值是2。这样说不知道你明白没有。
比如 int *a,就是定义了一个整型的指针。而在下面程序调用的时候直接用 b=2,a=&b这样的等式来调用表示把b的地址赋给a,而调用的时候用*a的话就是读取存在a里面的地址上的值,这里的a里存的是b的地址,所以*a的值是2。这样说不知道你明白没有。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不加表示的是p本身的值,即p指向的对象的地址,主要要知道是地址,举个例子,定义一个数组a[5] int *p,p=a(p指向数组的第一个元素a[0],即*p=a[0]);那么当p=p+1,p自身加了一后,那么此时p就指向下一个元素,即a[1],此时*p=a[1]。总之,记住p记录数组元素的地址,而*p就等同数组值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询