(1)定义一个整型指针变量p,使它指向一个5个元素的一维数组. (2)使用指针移动的方式,输入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 运算符可方便的使用变量。
参考资料来源:百度百科-指针
参考资料来源:百度百科-动态分配内存
推荐于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) #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;
呵呵。。。其实。。我想说的是。。。这七个其实是,一道题,字数超了,所以我给补充那样写的。。。。
我承认被你玩了