关于c语言指针赋值的问题!
#include<stdio.h>#include<stdlib.h>main(){inta=3,b=4,*x,*y;*x=a;*y=b;printf("%d%d",*x...
#include<stdio.h>
#include<stdlib.h>
main(){
int a=3,b=4,*x,*y;
*x=a;*y=b;
printf("%d %d",*x,*y);
system("pause");
return 0;
}
为什么这样赋值运行错误?
(2)int a=3,b=4,*x,*y;
*x=&a;*y=&b;
为什么这样也是错误的而
int a=3,b=4,*x,*y,*x=&a;*y=&b;
这种是正确的! 展开
#include<stdlib.h>
main(){
int a=3,b=4,*x,*y;
*x=a;*y=b;
printf("%d %d",*x,*y);
system("pause");
return 0;
}
为什么这样赋值运行错误?
(2)int a=3,b=4,*x,*y;
*x=&a;*y=&b;
为什么这样也是错误的而
int a=3,b=4,*x,*y,*x=&a;*y=&b;
这种是正确的! 展开
11个回答
展开全部
int a=3,b=4,*x,*y;
*x=a;*y=b;
指针变量x,y没有初始化,变量里存储的是不确定的值(垃圾值),间接访问一个不确定的内存位置是非法的。所以“*x=a;*y=b;”非法。“*x=&a;*y=&b;”同样也是,这里暂时不管赋值号"="两边的类型是否兼容。
int a=3,b=4,*x,*y;
x=&a;y=&b;//&a、&b分别取变量a、b的地址,然后给指针变量x、y赋值。
这时x指向a(x存储的a的地址),y指向b。通过*x即可访问a(*x和a等效),此时*x和a都代表同一个存储位置。因此你最后的写法是正确的。切记,在间接访问指针之前,要确保指针指向一个明确的内存位置。
*x=a;*y=b;
指针变量x,y没有初始化,变量里存储的是不确定的值(垃圾值),间接访问一个不确定的内存位置是非法的。所以“*x=a;*y=b;”非法。“*x=&a;*y=&b;”同样也是,这里暂时不管赋值号"="两边的类型是否兼容。
int a=3,b=4,*x,*y;
x=&a;y=&b;//&a、&b分别取变量a、b的地址,然后给指针变量x、y赋值。
这时x指向a(x存储的a的地址),y指向b。通过*x即可访问a(*x和a等效),此时*x和a都代表同一个存储位置。因此你最后的写法是正确的。切记,在间接访问指针之前,要确保指针指向一个明确的内存位置。
展开全部
有一个概念可能没搞清楚。
赋值和初始化是不同的概念。
比如 int a;这是初始化 a=3是赋值操作。
指针也是比较特殊的 int *x=&a 就是初始化时赋值 这是可以的。
而 *x=&a写法就有误,仔细想下,int *x 表明x就是指针 ,指针是用来存放数的地址的。
因此 *x=&a 说明是同一个数在改,而正确的赋值语句应该是 x=&a 就可以了。
有的时候 初始化更清晰的写法就是 int * p=&a 你看 *是初始化定义的操作 而后面才是赋值。
赋值和初始化是不同的概念。
比如 int a;这是初始化 a=3是赋值操作。
指针也是比较特殊的 int *x=&a 就是初始化时赋值 这是可以的。
而 *x=&a写法就有误,仔细想下,int *x 表明x就是指针 ,指针是用来存放数的地址的。
因此 *x=&a 说明是同一个数在改,而正确的赋值语句应该是 x=&a 就可以了。
有的时候 初始化更清晰的写法就是 int * p=&a 你看 *是初始化定义的操作 而后面才是赋值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个是因为x和y没有申请空间,不能直接赋值,第二个一样的原因,而且你把地址赋给指针指向的值本身就是错误的,第三个是对指针进行初始化,也就是给他一个指向的地址,
其实*x = &a 就是 int *x; x = &a;
其实*x = &a 就是 int *x; x = &a;
追问
怎样给x y 申请空间? 加什么语句?
追答
申请空间用malloc,你可能刚开始学习,申请空间暂时还没学习到,其实 x = &a 就已经给予了x一个地址,也就是a的地址,由于a在最开始已经申请好了空间,所以赋给x后就能直接使用了。
记住,指针指向的一定是地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.
n
是整型变量,p是指向整型变量的指针,q是指向指针的指针。也就是
n中存放整型数,p中存放整形数的地址,q中存放指针的地址。
*
在运算中的作用是代表取指针所指向的变量。所以选D
2.n1=0;
p指向了n2,也就是通过*p能够取到n2的值;
同理通过*q也能够取到n1的值。
所以等价的是:选项A
n
是整型变量,p是指向整型变量的指针,q是指向指针的指针。也就是
n中存放整型数,p中存放整形数的地址,q中存放指针的地址。
*
在运算中的作用是代表取指针所指向的变量。所以选D
2.n1=0;
p指向了n2,也就是通过*p能够取到n2的值;
同理通过*q也能够取到n1的值。
所以等价的是:选项A
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
老兄!*p=&a这种写法是错误的!定义一个int
*p指针就应该给他一个指向,不然是不安全的,就像这样p=&a,就让p指向了a的地址,也就是p中存放了a的地址,访问一个值,可以通过地址来访问,像*P这个运算就是用来访问p所表示地址的里面的一个值!我们通过这个p=&a使得p指向a,那么*p就是访问a了。
*p指针就应该给他一个指向,不然是不安全的,就像这样p=&a,就让p指向了a的地址,也就是p中存放了a的地址,访问一个值,可以通过地址来访问,像*P这个运算就是用来访问p所表示地址的里面的一个值!我们通过这个p=&a使得p指向a,那么*p就是访问a了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询