inta=2,*pa;pa=a;以上语句实现了定义指针变量pa,则*pa=?

6043℃ ROY

inta=2,*pa;pa=a;以上语句实现了定义指针变量pa,则*pa=?

已知int a[2],*pa=&a[0];语句pa+=2;执行后,指针变量pa指向数组元素( )A

int *pa = &a[0] 就是a[0] pa=pa+2 就hi越界的节奏。答案是D。

如有int a =2,*p=&a ,*q=&a; 想问下指针*p一般是取内容,变量p一般是取地址&,但在此例中表达什么意思?

你能看懂: int* a;跟 int *a;吗亲?! 事实上int类型的指针是有自己的数据类型的:int* 但是为了方便在定义int变量的同时也能定义int指针故有此定义方式:int *p; 但你要很清楚,在定义指针的时候 *p的*并不是取内容的意思,而仅仅代表定义了一个指针变量! 事实上,正确的指针定义方式应该这么写:int* p; 好,这个问题解决了! (应该解决了吧 ?亲?) 那么下一个问题 也就是解释你的问题了......囧! *p=&a;语句中的*并不是你想的取内容的意思,但是后面的 &的确是取地址的意思 在定义中 写*p=&a如此代码对初学者来说真的不好理解 但是如果你很仔细了领会了我之前跟你说的知识那也不是不可以理解,你觉得呢?懂否? 不懂么? 那我把代码改成: int a=2,*p,*q; p=&a; q=&a; 呢?亲? 跟你的代码是等价的哦! 你当区分定义的时候指针的使用跟代码中指针的使用! 有过int a=2,*p=&a,*q=&a;的定义则代码中*p=a;的意思就是把a的数值赋值给p指向的int型数据,这里是变量a,故毫无意义,假定b=3;那么*p=b;之后b还是=3,指针p的值未变,但是指针所指的内容a发生了变化,变成了b的值3,此过程中指针p什么都没变! p,q是指针,&是取地址,&a取到的是变量a的地址,指针也是地址,这样赋值没问题吧?还有问题那就是你的问题了!

C++代码: int a=20, *pa; pa=&a; *pa=a++;cout<<*pa<<endl; 输出是20,但不应该是21吗?求具体解释~

pa=&a 相当于用指针pa,保存变量a的地址。

此时*pa=20;(因为指针pa存的是a的地址,因为a是20)

*pa=a++可以看成:

*pa=a;

a++;

此时a=21; 由于指针是pa保存a的地址的,a值变了,a++ 是在*pa=a后,在自己加的,a值变了,所以指针p跟着变 就是*p=21;

我用vs2010 结果就是21,

不是21那是编辑器的问题.....

如果*p=++a;可看成:

a=a+1; a就21

*p=a; *p还是为21

结果都是21

C语言指针选择题 求解析

原发布者:果果兮浪子

1.若已定义:inta[]={0,1,2,3,4,5,6,7,8,9,*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是A)a[p-a]B)*(&a[i])C)p[i]D)a[10]D2.已知指针p的指向如下图所示,则执行语句*--p;后*p的值是a[0]a[1]a[2]a[3]a[4]┌──┬──┬──┬──┬──┐│102030│4050└──┴──┴──┴──┴──┘p↑A)30B)20C)19D)29B3.下面程序运行时,如果从键盘上输入3,5,程序输出的结果是________。main(){inta,b,*pa,*pb;pa=&a;pb=&b;scanf("%d,%d",pa,pb);*pa=a+b;*pb=a+b;printf("a=%d,b=%d\n",a,b);A)a=13,b=13B)a=8,b=8C)a=8,b=13D)出错C4.下面程序段的输出结果是________。main(){charstring1[20],string2[20]={"ABCDEF";strcpy(string1,string2);printf("%s\n",string1+3);A)EFB)DEFC)CDEFD)ABCDEFB5.下列程序执行后的输出结果是________。main()1{inta[3][3],i,*pmul;pmul=&a[0][0];for(i=0;i<9;i++)pmul[i]=i+1;printf("%d\n",a[1][2]);A)3B)6C)9D)随机数B6.有如下程序段int*p,a=10,b=1;p=&a;a=*p+b;执行该程序段后,a的值为________。A)12B)11C)10D)编译出错B7.对于基类型相同的两个指针变量之间,不能进行的运算是A)<B)=C)+D)–C8.以下函数返回a所指数组中最小值