1.比较复杂的控制指针指向,可以画图帮助理解,创建数组时,数组的地址时固定的,要在函数里对指针进行操作,需要先定义一个指针指向该数组,然后移动指针的位置,就可以对数组进行灵活的修改等操作。
#include<iostream>
using namespace std;
char *trans(char *a){
int i=0;
while(*a!='#'){
a++;
i++;
}
int j=i;
while(*a=='#'||*a==' '){
a--;
j--;
}
a=a-j;//还原,回位;
char *s=new char[j+2];
for(int k=0;k<=j;k++){
s[k]=a[k];
}
s[j+1]='#';
s[j+2]='\0';
return s;
}
int main(){
char a[30];
cin.getline(a,30);//第一次把cin.getline忘了,一直在检查前面,
//一定要注意,以换行符为断点时使用cin.getline
char *p=a;
cout<<trans(p)<<endl;
return 0;
}
2.
#include<iostream>
using namespace std;
int main(){
int m,n;
cin>>m>>n;
int sum=0;
int **p=new int*[m];
for(int i=0;i<m;i++){
p[i]=new int[n];
for(int j=0;j<n;j++){
cin>>p[i][j];
sum+=p[i][j];
}
}
cout<<sum<<endl;
for(int i=0;i<n;i++){
delete[]p[i];
}
delete[]p;
return 0;
}
动态创建二维数组;反向释放;
int **p=new int*[m];
for(int i=0;i<m;i++){
p[i]=new int[n];
for(int j=0;j<n;j++){
cin>>p[i][j];
sum+=p[i][j];
}
}
3.
#include<iostream>
using namespace std;
int *new_array(int n){
int *p=new int[n];
return p;
}
void init_array(int *p, int n,int c){
for(int i=0;i<n;i++){
//*p[i]=c;
p[i]=c;
}
}
int main(){
int n,c;
cin>>n>>c;
int *p;
p=new_array(n);
init_array(p,n,c);
cout<<*p;
for(int i=1;i<n;i++){
//cout<<" "<<*p[i];
cout<<" "<<p[i];
}
cout<<endl;
}
4.
#include<iostream>
using namespace std;
/*int sumDiagonal(int **a,int n){
int sum=0;
for(int k=0;k<n;k++){
sum+=a[k][k];
}
return sum;
}*/
int sumDiagonal(int *a,int n){
int sum=0;
for(int k=0;k<n;k++){
sum+=a[k*n+k];
}
return sum;
}
int main(){
int n;
cin>>n;
/*int **p=new int*[n];
for(int i=0;i<n;i++){
p[i]=new int[n];
for(int j=0;j<n;j++){
cin>>p[i][j];
}
}*/
int *p=new int[n*n];
for(int i=0;i<n*n;i++){
cin>>p[i];
}
cout<<sumDiagonal(p,n)<<endl;
delete[]p;
return 0;
}
这里可以用双下标和单下标,对比学习一下。
记得释放空间!!!
5.
#include<iostream>
using namespace std;
bool helidizhi(int *p){
for(int i=0;i<4;i++) {
if(p[i]>255||p[i]<0){
return false;
}
}
return true;
}
int *trans(int a){
int b[8];
int i=7;
while(a>=0&&i>=0){
b[i]=a%2;
a=a/2;
i--;
}
/*for(int k=i;k>0;k--){
b[k]=0;
}*/
return b;
}
int main(){
int a[4];
int *p=a;
scanf("%d.%d.%d.%d",&a[0],&a[1],&a[2],&a[3]);//shuru
//jianyan
if(helidizhi(p)==false){
cout<<"data error"<<endl;
return 0;
}
//zhuan2jinzhi
int s[8];
for(int i=0;i<4;i++){
for(int j=0;j<8;j++){
s[j]=*(trans(p[i])+j);
cout<<s[j];
}
}
cout<<endl;
return 0;
}
在输入卡了一下,后面发现了scanf函数
int a[4];
int *p=a;
scanf("%d.%d.%d.%d",&a[0],&a[1],&a[2],&a[3]);
主要有以下几个步骤:
1)输入,用了一个数组a[4];
1.5)还有一个判断合理性的函数,这里二进制的位数是八位,可以计算得出最多是255,所以合理的输入范围是0-255,用一个bool类型的函数,在主函数里进行合理性的补充语句;
2)转二进制,用一个s[8]数组来存放结果,最后直接返回s的指针;
3)在主函数里进行两个for循环的嵌套,用来输出四个八位二进制数。
真不错!!!