(1)定义一个整型指针变量p,使它指向一个5个元素的一维数组. (2)使用指针移动的方式,输入5个整型数组元素.

(3)定义一个整型指针变量q,使用malloc函数动态分配5个整型数的地址空间。
(4)使用数组下标的方式输入5个整型元素。
(5)使用指针p和q分别访问两组数据,如果第一组数据对应位置的值大于第二组,则交换对应位置的值。
(6)分别输出交换后的两组数。
(7)按十六进制方式输出p、a和q的地址。

源代码如下:

#include<stdio.h>

#include<stdlib.h>

int main(){

int a[5];

int *p=a;                                   //定义一个整型指针变量p,使它指向一个5个元素的一维数组.

int i;

printf("Please input:");

for(i=0;i<5;i++)

scanf("%d",p+i);                        //使用指针移动的方式,输入5个整型数组元素.

int *q=(int*)malloc(sizeof(int)*5);   //malloc函数动态分配5个整型数的地址空间。

printf("Please input:");

for(i=0;i<5;i++)

scanf("%d",q+i);   //使用数组下标的方式输入5个整型元素。

for(i=0;i<5;i++)     

if(p[i]>q[i]){

int t=p[i];

p[i]=q[i];

q[i]=t;

}

for(i=0;i<5;i++) //使用指针p和q分别访问两组数据

printf("%d",p[i]);

putchar('\n');

for(i=0;i<5;i++)

printf("%d",q[i]);

putchar('\n');

printf("p=%x\n",p); //分别输出交换后的两组数。

printf("a=%x\n",a);

printf("q=%x\n",q);

free(q);

q=NULL;//按十六进制方式输出p、a和q的地址。

return 0;

}

运行结果如下:

扩展资料:

指针的初始化、动态分配内存的方法

指针的初始化

对指针进行初始化或赋值只能使用以下四种类型的值  :

1. 0 值常量表达式,例如,在编译时可获得 0 值的整型 const对象或字面值常量 0。

2. 类型匹配的对象的地址。

3. 另一对象末的下一地址。

4. 同类型的另一个有效指针。

把 int 型变量赋给指针是非法的,尽管此 int 型变量的值可能为 0。但允

许把数值 0 或在编译时可获得 0 值的 const 量赋给指针:

int ival;

int zero = 0;

const int c_ival = 0;

int *pi = ival; // error: pi initialized from int value of ival

pi = zero;// error: pi assigned int value of zero

pi = c_ival;// ok: c_ival is a const with compile-time value of 0

pi = 0;// ok: directly initialize to literal constant 0 

除了使用数值 0 或在编译时值为 0 的 const 量外,还可以使用 C++ 语言从 C 语言中继承下来的预处理器变量 NULL,该变量在 cstdlib头文件中定义,其值为 0。

如果在代码中使用了这个预处理器变量,则编译时会自动被数值 0 替换。因此,把指针初始化为 NULL 等效于初始化为 0 值 [3]  :

// cstdlib #defines NULL to 0

int *pi = NULL; // ok: equivalent to int *pi = 0; 

动态分配内存的方法

new可用来生成动态无名变量

(1)new可用来生成动态无名变量

如 int *p=new int;

int *p=new int [10]; //动态数组的大小可以是变量或常量;而一般直接声明数组时,数组大小必须是常量

又如:

int *p1;

double *p2;

p1=new int⑿;

p2=new double [100];

l 分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间,并将首地址值返回指针p1;

l 动态分配了具有100个双精度实型数组元素的数组,同时将各存储区的首地址指针返回给指针变量p2;

对于生成二维及更高维的数组,应使用多维指针。

以二维指针为例

int **p=new int* [row]; //row是二维数组的行,p是指向一个指针数组的指针

for(int i=0; i<row; i++)

p[i]=new int [col]; //col是二维数组的列,p是指向一个int数组的指针

删除这个二维数组

for(int i = 0; i < row;i++)

delete []p[i]; //先删除二维数组的列

delete []p;

⑵使用完动态无名变量后应该及时释放,要用到 delete 运算符

delete p; //释放单个变量

delete [ ] p;//释放数组变量(不论数组是几维

相比于一般的变量声明,使用new和delete 运算符可方便的使用变量。

参考资料来源:百度百科-指针

参考资料来源:百度百科-动态分配内存

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-28

你好,完成以上功能的代码如下

根据你要求的malloc我觉得应该是用C语言来做吧!

如果我理解错了,请指正!

#include<stdio.h>

#include<stdlib.h>

int main(){

   int a[5];

   int *p=a; //完成(1)

   int i;

   printf("Please input:");

   for(i=0;i<5;i++)

  scanf("%d",p+i);   //完成(2)

      int *q=(int*)malloc(sizeof(int)*5);   //动态分配内存空间   //完成(3)

  printf("Please input:");

      for(i=0;i<5;i++)

 scanf("%d",q+i);   //完成(4)

     for(i=0;i<5;i++)      //完成(5)

if(p[i]>q[i]){

   int t=p[i];

   p[i]=q[i];

   q[i]=t;

}

for(i=0;i<5;i++) //完成(6)

   printf("%d",p[i]);

   putchar('\n');

for(i=0;i<5;i++)

   printf("%d",q[i]);

   putchar('\n');

               printf("p=%x\n",p); //完成(6)

   printf("a=%x\n",a);

   printf("q=%x\n",q);

  free(q);

  q=NULL;//释放动态分配的内存

return 0;

}

执行结果:

本回答被提问者和网友采纳
第2个回答  2013-04-11
(1)int (*p)[5];

(2) #include <iostream>
int a[5] = {0};
int* p = a;
for(int i=0; i<5; ++i) { std::cin >> *(p+i) }

(3)int* q = (int*)(malloc(5*sizeof(int));

(4)
#include <iostream>
int a[5] = {0};
for(int i=0; i<5; ++i) { std::cin >> a[i]; }

(5)#include <xutility>
int a[5] = {0};
int b[5] = {0};
int* p = a;
int* q = b;
for(int i=0;i<5;++i)
{
if(*(p+i) > *(q+i))
{
std::swap(*(p+i), *(q+i));
}
}

(6)
for(int i=0;i<5;++i)
{
std::cout<<a[i]<<" ";
}
for(int i=0;i<5;++i)
{
std::cout<<b[i]<<" ";
}

(7)
std::cout << p << q << a;追问

呵呵。。。其实。。我想说的是。。。这七个其实是,一道题,字数超了,所以我给补充那样写的。。。。

追答

我承认被你玩了

追问

。。。。。。我承认我错了

相似回答