//数组元素为指针的数组称之为指针数组。指针数组可以让每个数组元素指向不同的内存块,实现对不同大小的内存块的数据统一管理。//程序:从键盘输入一组字符串使用指针数组对他们进行由小到大的排序并输出#include<iostream>usingnamespace std;intmain(){int b =3,
c =5,
d =1,
e =7,
f =2;int*a[5]={&b,&c,&d,&e,&f};//指针数组a装5个元素的地址
cout << d << endl;*a[2]=9;//== d=9;改变d的值
cout << d << endl;//指针数组拉链结构,不同于2维数组!!指针数组内的不同数组之间各元素不是连续的int q[2]={3,2},
w[3]={5,2,6},
h[2]={9,4},
r[5]={7,5,4,3,1};*(r)=9;int*t[4]={&q[0],w,h,r };//t是(指针)数组的名字,4是该数组的大小//也可以用 int * (t[6])={ &q[0],w,h,r };即定义大一点的数组来装地址,没用到的空间不影响
cout <<*(t[1]+0)<< endl;//输出w[0]即5
cout << t[1][0]<< endl;char ch[5][20];char*pch[5];int i, j;for(i =0; i <5; i++){
cin.getline(ch[i],20);//键盘输入字符串,给字符数组赋值
pch[i]= ch[i];//将个字符串的首地址传给指针数组各元素
cout <<&pch[i];}//排序system("pause");return0;}
有参数有返回值的函数
#include<iostream>usingnamespace std;intFindMaxnum(int*p,int length,int* p1){//int i = 0;int maxnum = p[0];for(int i =0; i < length; i++){if(p[i]>= maxnum){
maxnum = p[i];}}*p1 = maxnum;return maxnum;}intmain(){int a[6]={45,55,87,4,5,22};int n =0;//不初始化可能出问题
cout <<"最大值为"<<FindMaxnum(a,6,&n )<< endl;
cout <<"最大值:"<<n << endl;system("pause");}
计算奇数和
/* 设计一个程序,从键盘输入10个整数,并计算其中奇数的和。
提示:利用一维数组来存放10个整数。判断整数n是否为奇数:n % 2 != 0。
#include<iostream>
using namespace std;
int main()
{
int num[10], sum=0;
for (int i = 0; i < 10; i++)
{
cin >> num[i];
if (num[i] % 2 != 0)
{
sum += num[i];
}
}
cout << sum;
system("pause");
return 0;
}*/
寻找最大偶数
/*3. 设计一个程序,寻找10个正整数中的最大偶数,若该组数据中不存在偶数,则输出“未发现偶数”*/#include<iostream>usingnamespace std;intmain(){int num[10];int max=0;int i =0;for(int i =0; i <10; i++){
cin >> num[i];}
max = num[0];for(int i =0; i <10; i++){if(num[i]%2==0&& num[i]> num[0]){
max = num[i];}}
cout <<"最大偶数为"<< max <<"\n";if(num[i]%2!=0){
cout <<"未发现偶数"<<"\0";}system("pause");return0;}
求平均最大值/最小值
#include<iostream>usingnamespace std;intmain(){int i, Ave, Min, Max;int data[8]={0,112,43,78,-11,-6,7,9};
Ave =0;for(i =0; i <8; i++)//********error********
Ave += data[i];
Ave /=8;
cout <<"平均值为: "<< Ave << endl;
Max = Min = data[0];for(i =0; i <8; i++){//********error********if(data[i]> Max) Max = data[i];//********error********if(data[i]< Min) Min = data[i];}
cout <<"最大值为: "<< Max << endl;
cout <<"最小值为: "<< Min << endl;system("pause");return0;}
#include<iostream>//malloc头文件为<stdlib.h>和<malloc.h>//因为是内建函数所以不加也可以
using namespace std;intmain(){int*p=(int*)malloc(4);//申请4字节的空间大小(int,long型,float,2个short 都是4字节),并强转为int型//double *d;//d=(double*)malloc(8u);//加u后缀表示无符号的8,写不写意义不大,编译器会帮你转换//d=(double*)malloc(sizeof(double));也可以使用sizeof得出空间大小//size_t == unsigned int;注意32位的编译器环境下4字节,64位的编译器为8字节int c =sizeof(size_t);
cout <<"size_t大小为"<< c << endl;int*p1 =(int*)malloc(sizeof(int)*10);//申请10个整形元素的40字节空间for(int i =0; i <10; i++){
p1[i]= i +1;
cout << p1[i]<< endl;//*(p1+i)}memset(p1,0,40);
cout <<"memset赋值后"<< endl;for(int i =0; i <10; i++){
cout <<*(p1 + i)<< endl;}//p1++;必须释放首地址否则崩溃free(p1);//释放空间归还给操作系统,只可free一次
p1 =NULL;//malloc动态一维数组unsignedint q;int*w;
cout <<"输入动态数组大小"<< endl;scanf_s("%u",&q);
w =(int*)malloc(q);free(w);
w =NULL;//二维数组指针int(*g)[2][3]=(int(*)[2][3])malloc(sizeof(int)*2*3);int z[2][3];int(*z1)[2][3]=&z;//*g == z;//*z1 == z;(*g)[0][0]=1;//z[0][0]*(*((*g)+0)+1)=2;//z[0][1]*((*g)[0]+2)=3;//z[0][2](*g)[1][0]=4;//z[1][0]*(*((*g)+1)+1)=5;//z[1][1](*g)[1][2]=8;//z[1][2]//!!!总结://*(p+i)==p[i]//*((*g)+i)==g[i]// *( *((*g)+i) +j)==g[i][j]//(*g)的小括号一定要加上!!!
cout <<"打印二维数组6个元素"<< endl;for(int i =0; i <2; i++){for(int j =0; j <3; j++){
cout <<(*g)[i][j]<< endl;}}free(g);
g =NULL;system("pause");return0;}
calloc和realloc函数
#include<iostream>
using namespace std;intmain(){int*p =(int*)calloc(5,4);//申请一段空间数组,5个元素,每个元素4字节//calloc申请数组空间内元素的值,默认初始化所有元素为0for(int i =0; i <5; i++){
cout << p[i]<< endl;}
size_t a =_msize(p);//调用_msize函数返回(无符号整形)空间大小,参数为空间首地址
cout <<"申请空间大小为"<< a << endl;int*p1 =(int*)realloc(p,30);//realloc(原空间的首地址,重新分配空间字节大小)//p1==p用p1去接首地址p两者本质一样//如果重新申请的空间太大系统无法分配,系统会选择其他更大的内存空间或者返回NULL
a =_msize(p1);
cout <<"重新申请空间大小为"<< a << endl;free(p);free(p1);system("pause");return0;}