标题: C语言指针的一点小疑问 [打印本页]

作者: 254zhang    时间: 2019-12-30 11:17
标题: C语言指针的一点小疑问
   
1.  
     int b=5;
     int  *a = &b;  

2.
     int b = 5;
    int*    a =&b;

3.

   int b = 5  ,*a;
   a = &b;

这三种写法有区别吗

是不是都是把b的地址赋给指针变量a

如果一样的话 哪种写法比较好

作者: 254zhang    时间: 2019-12-30 11:59
还有一个问题  
int *a = &b;   (这是把b的地址赋给指针变量a)

和  *a = &b;  (这是把b的地址赋给指针变量a的存储的数据)  

为什么含义不一样呢?  
作者: zsm15431078    时间: 2019-12-30 15:25
发表下个人看法,针对第一个问题:
1.以上三个写法是一样的。个人比较倾向于第三种写法。先定义变量,然后赋值。
2.   int *a = &b;是定义一个指针变量a,同时初始化。
*a = &b是一个赋值语句,所以含义不同。
作者: 艽野尘梦    时间: 2019-12-30 15:38
三者在运行编译时的效果是一致的,含义也大致相同
作者: 艽野尘梦    时间: 2019-12-30 15:41
三者运行编译的效果一样,1和2只是空格格式不同,3是先定义再赋值,最终效果是一样的,个人喜欢第一种,定义和赋值在一起,少打一行,而且可以防止后面忘记赋值
作者: liuyongjun000a    时间: 2019-12-30 18:09
实际上你自己全懂了。这个书写格式,只有软件本身认可,试了就知了。没有文章说明中间空格就不是一个定义词来的。如*  A,或:=    some;前者就是:*A,空了也是*A,等于后面的空好几个也是一个some.
作者: 啦啦啦123321    时间: 2019-12-30 21:47
一个意思吧,第一种更好一点
作者: jizhongbiao    时间: 2019-12-31 16:15
结果一样,第一种和第二种完全一样。个人决定第三种写法比较好。
作者: 1332112623    时间: 2020-1-1 18:05
都一样,我觉得第一种好点
作者: w1179benp    时间: 2020-1-3 08:38
这个看个人习惯,以及代码作用——是否有他人需要,选个通俗易懂的就OK
作者: jaken_tony    时间: 2020-1-3 09:51
三个写法都一样,一般做法是第一种,特别是在一行中定义多个变量时,简单明了,能有效区分哪些是数据变量,哪些是指针变量。至于说补充的问题,如果是单独一行来写,前面没有变量类型限定符 则*a将会被编译器认为是一个整体,表示a指针指向的int变量,也是常规的指针用法,但是你这样写的话,如果a指针没有初始化,会导致程序出现无法预测的问题,即野指针问题。
作者: 御羽    时间: 2020-1-3 17:21
结果完全一样。个人决定第三种写法比较好。先定义变量,然后赋值。清晰明了
作者: lllxy    时间: 2020-1-3 18:51
三种写法都一样,都是把b的地址赋给指针变量a,一般是写作第一种
作者: 还有谁?    时间: 2020-1-3 19:29
书写规范的代码让人看了赏心悦目,代码的可读性强。书写规范的代码无论对自己对别人都有好处。
作者: Abc_zh    时间: 2020-1-3 20:24
除了第三种,我不是很赞同这样的写法以外,第1 、2 种写法都可以。这是因为第三种会存在野指针的问题,虽然在你的编译器当中会编译通过,但是可能会导致出现不可预测的错误,毕竟你在定义*a的时候并没有初始化给它,但是在内存中会划分了某个区域给它,而这个区域的话,有可能存放着其他的数据,可能会导致一系列不可预测的错误发生。或者你在定义*a时直接赋值为空,即 int * a = NULL;然后再进行下一步操作,如:a = &b;
作者: ddddddd1wu    时间: 2020-1-3 22:06
则三种写法是一样的,但是至于哪种比较好,各有各的道理。个人建议*号跟随变量,比如(int *a)并且同时初始化,以免忘记,造成悬空指针。
作者: 没耐心    时间: 2020-1-4 10:42
254zhang 发表于 2019-12-30 11:59
还有一个问题  
int *a = &b;   (这是把b的地址赋给指针变量a)

首先,3中实现的是一样的,但是第三种不太严谨,在定义的同时没有初始化,会出现野指针。他们都是实现了把b的地址放入a中,也就是指针a指向b的地址。第二个问题,第一个是定义一个指针同时初始化,第二个是把b的地址的数值放入a指向的空间中,不是b的值。
作者: 瑜乔    时间: 2020-1-4 12:17
一样的,看个人习惯,以及行业习惯
作者: 流星2019    时间: 2020-1-4 15:47
指针就是指向地址的意思,在指针运算的过程中是在对地址进行操作,你明白这个就清楚了
作者: lsc124    时间: 2020-1-4 16:27
三种写法没有实际上的区别,但是我个人比较喜欢第一种写法,很多c语言的书上也是第一种写法




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1