给指针赋值时应该是p=a还是p=&a

小克n 2015-12-29 10:42:06
#include <stdio.h>
main()
{
int a[10];
int i=0;
for(i=0;i<10;i++)
{
a[i]=i+1;
}
int *p;
p=&a;
printf("%d\n",*p+1);
return 0;
}


一、第11行,在VC里p=&a 编译通不过,p=a可以。在啊哈C里面 都可以通过,那么正规的写法是什么。
二、第12行,*p+1 应不应该加括号,加不加括号都可以通过编译。
三、论坛没有发帖分了怎么办,离不开大神们啊!!
...全文
2178 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
对于数组a,数组名其实就是地址了,不用取地址符,至于要不要加括号,看你想做什么了,如果想看第二个元素值,那是需要加括弧的。
seanking1987 2015-12-29
  • 打赏
  • 举报
回复
#include <stdio.h>
main()
{
    int a[10];
    int i=0;
    for(i=0;i<10;i++)
    {
        a[i]=i+1;
    }
    int *p;
    p=a;
    for(i=0;i<10;i++)
    {
        printf("%d\n",*(p+i));
    }
    return 0;
}
sdghchj 2015-12-29
  • 打赏
  • 举报
回复
p是int*指针,而数组名a相当于是int*常量,所以正规是p=a; 但是,任何类型指针的值都是一个地址值,在32位系统里就是一个32位整数,所以如果不考虑安全访问方面,任何类型指针间是可以相互间强制转换的。 而&a是取数组a的地址,相当于int (*) [10]类型的数组指针,所以p=&a也是可以的,只看编译器检查规则是否够严格了,即便很严格也可以p=(int*)&a强制转换。 而数组名a表示的是指向数组首地址的常量指针,与数组地址&a是一样的,所以p=a和p=&a效果是一样的。 *p+1加不加括号的问题得看你到底要干嘛,星号运算级高于加号。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧