鱼C论坛

 找回密码
 立即注册
查看: 1859|回复: 2

NO.3 指针相关

[复制链接]
发表于 2022-3-12 16:14:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Q:经过下列语句:int j,a[10],*p;定义后,
下列语句中合法的是
A.  p=p+2;
B.p=a[5];
C.p=a[5]+2;
D.p=&(j+2);
       


A.
#include <stdio.h>
#include <math.h>

int main()
{
       int a[10],*p;
           
           printf("a=%d\n", a);  // 
       
       printf("a[0]=%d\n",a[0]);// 
       
       printf("a[10]=%d\n", a[10]);// 
       
           printf("p=%d\n", p);   // 
       
           printf("*p=%d\n", *p); // 
           
        
           p=p+2;
           
           printf("a=%d\n", a);  // 
       
       printf("a[0]=%d\n",a[0]);// 
       
       printf("a[10]=%d\n", a[10]);// 
       
           printf("p=%d\n", p);   // 
       
           printf("*p=%d\n", *p); // 
           
        return 0;
}



为什么运行结果只有4行?
a=6487536
a[0]=1
a[10]=1
p=1



B.
p=a[5];
[Error] invalid conversion from 'int' to 'int*' [-fpermissive]
[错误]从“int”到“int*”的转换无效[-fpermissive]

C.
p=a[5]+2;
[Error] invalid conversion from 'int' to 'int*' [-fpermissive]

D.   p=&(j+2);
[Error] lvalue required as unary '&' operand
[错误]左值需要作为一元'&'操作数



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-12 20:10:45 | 显示全部楼层
本帖最后由 梦回连营 于 2022-3-12 20:12 编辑

我试了一下好像是只有 A 是合法的,p 是一个指向 int 的指针,一个 int 需要的 4 位进行存储, p = p + 2 之后 p 指向的地址会后移 8 位,虽然没有给 p 初始化,但是它还是指向了一个地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-13 21:31:31 | 显示全部楼层
梦回连营 发表于 2022-3-12 20:10
我试了一下好像是只有 A 是合法的,p 是一个指向 int 的指针,一个 int 需要的 4 位进行存储, p = p + 2  ...

嗯,是只有A能运行,其他的直接不符规定,但我A运行也有问题QAQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 16:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表