猿问

关于C语言程序的几个问题

(一)请问A选项里,void swpa(int *p,int *q)里的a并没有赋初值,那么&a合法吗?

(二)请问B选项里哪里错了?

by_Z
浏览 1178回答 4
4回答

紫泉

你的第一个问题,int *t, a;   t  = &a;是没有问题的。其实这2句就是等价于 int *t = new int; t = &a;  如果不给t其指向的地址,直接 *t = *p就会出错,因为都不知道t指向哪儿,*t怎么得到。所以int*t 声明了一个指针后,再给指针t一个地址让其指向,这里的a是一个乱七八糟的数,我们的目的只要是一个存储int型占4个字节的地址就行了,至于这个地址里原来放的是什么乱七八糟的都无所谓,所以只要把a的地址给t就行,不用给a赋值。

紫泉

int *a;    *a = 10;是错误的,因为你没有给指针a申请空间,你只是声明了一个指针而已。然后并没有空间,所以不能给a指向的空间赋值,可以这样写。int *a = new int;    *a = 10就可以了。或是写成int *a = new int();    *a = 10;或是写成int* a = new int(10);

紫泉

(一)和(二)都没有错误,(三)错了。

紫泉

。。。我真佩服你,你的理解能力。。
随时随地看视频慕课网APP
我要回答