鱼C论坛

 找回密码
 立即注册
查看: 2388|回复: 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.
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.        int a[10],*p;
  6.           
  7.            printf("a=%d\n", a);  //
  8.       
  9.        printf("a[0]=%d\n",a[0]);//
  10.       
  11.        printf("a[10]=%d\n", a[10]);//
  12.       
  13.            printf("p=%d\n", p);   //
  14.       
  15.            printf("*p=%d\n", *p); //
  16.           
  17.        
  18.            p=p+2;
  19.           
  20.            printf("a=%d\n", a);  //
  21.       
  22.        printf("a[0]=%d\n",a[0]);//
  23.       
  24.        printf("a[10]=%d\n", a[10]);//
  25.       
  26.            printf("p=%d\n", p);   //
  27.       
  28.            printf("*p=%d\n", *p); //
  29.           
  30.         return 0;
  31. }
复制代码




为什么运行结果只有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
[错误]左值需要作为一元'&'操作数



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我试了一下好像是只有 A 是合法的,p 是一个指向 int 的指针,一个 int 需要的 4 位进行存储, p = p + 2 之后 p 指向的地址会后移 8 位,虽然没有给 p 初始化,但是它还是指向了一个地址。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯,是只有A能运行,其他的直接不符规定,但我A运行也有问题QAQ
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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