我爱橙 发表于 2022-3-12 16:14:04

NO.3 指针相关

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


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

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



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



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

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

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



梦回连营 发表于 2022-3-12 20:10:45

本帖最后由 梦回连营 于 2022-3-12 20:12 编辑

我试了一下好像是只有 A 是合法的,p 是一个指向 int 的指针,一个 int 需要的 4 位进行存储, p = p + 2 之后 p 指向的地址会后移 8 位,虽然没有给 p 初始化,但是它还是指向了一个地址。

我爱橙 发表于 2022-3-13 21:31:31

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

嗯,是只有A能运行,其他的直接不符规定,但我A运行也有问题QAQ
页: [1]
查看完整版本: NO.3 指针相关