e#include <iostream>
using namespace std;
int main()
{
int a[10]={0,3,4,6,8}; //a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4
int *p=a,*p1=&a[9];
// cout<<&a[9]-&a[0]<<" "<<a[9]-a[0]<<endl; //输出9个元素,a[9]-a[0]的值
*(p+5)=15;
// cout<<&*(p+5)<<endl; 输出的是地址
// cout<<*(p+5)<<endl; 输出的是内容
// cout<<p<<endl; 输出的是a[0]的地址
// cout<<*p<<endl; 输出的是a[0]的内容
*(p1-3)=*(p+5)+1; //*(p1-3)等价于a[6],*(p+5)+1等价于a[5]的内容+1;
// cout<<*(p1-3)<<" "<<*(p+5)+1<<endl;
// cout<<a[6]<<" "<<a[5]<<endl; //a[6]=16,a[5]=15;
// cout<<a[5]+1<<endl; 等价于a[6]
for(int i=7;i<10;i++)
p[i]=10+i; //p[7]=17,p[8]=18,p[9]=19
cout<<"p1-a="<<p1-a<<endl; //输出有几个元素差
cout<<p1<<" "<<a<<endl;
// cout<<&a[9]-&a[0]<<endl;
// cout<<"a="<<a<<endl;
cout<<"a[p1-a]="<<a[p1-a]<<endl;
cout<<"*p1="<<*p1<<endl;
cout<<"*(&a[3])="<<*(&a[3])<<endl; //输出a[3]的内容
cout<<"*&a[3]="<<*&a[3]<<endl; ////输出a[3]的内容
// cout<<"&(*(a[3])="<<&(*(a[3]))<<endl; //错误定义
// cout<<"&*a[3]="<<&*a[3]<<endl; //错误定义
// cout<<"&(*p+1)="<<&(*p+1)<<endl; //错误定义
// cout<<"&(*p)="<<&(*p)<<endl; //输出第一个指针的地址
// cout<<"&(*p)+1="<<&(*p)+1<<endl; //第二个指针的地址
cout<<"(++*p)="<<(++*p)<<endl;
cout<<"(*p++)+1="<<(*p++)+1<<endl;
cout<<"(*p)++="<<(*p)++<<endl;
// for(int i=0;i<10;i++) 输出a[0]~a[9]
// cout<<a[i]<<" ";
cout<<endl;
/*** while(p1>&a[4]) //输出比a[4]大的
{
cout<<*p1<<" ";
p1--;
}
cout<<endl;
***/
return 0;
}
char s[21],*p=s;
for(int i=0;i<20;i++)
s[ i ]=‘A’+i; //s[0]=A;
s[20]=’\0’;
p++; //s[1]=B
cout<<“p=”<<p<<endl; //输出p指向的字符串
cout<<"*p="<<*p<<endl; //输出p指向的字符
字符数组 or 整型数组 or float型数组 or double型数组要比使用的数组范围大,否则内存出错,具体原因看了编译原理后再详解
定义的时候不可以对数组 or 指针的内容取地址,但是可以对数组 or 指针 的内容取地址。
/***
杨辉三角
***/
#include <iostream>
#include <cstdio>
using namespace std;
int a[100][100];
int main()
{
int i,j;
**a=1; //a[0][0]=1
int n;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
{
**(a+i)=1; //a[i][0]=1
*(*(a+i)+i)=1; //a[i][i]=1
for(j=1;j<i;j++)
*(*(a+i)+j)=*(*(a+i-1)+j-1)+*(*(a+i-1)+j); //a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
if(j>0)
cout<<" "<<*(*(a+i)+j);
else
cout<<*(*(a+i)+j);
}
cout<<endl;
}
}
return 0;
}
[上海程序设计B题] (https://ac.nowcoder.com/acm/contest/551/B)
AC代码:
#include<bits/stdc++.h>
using namespace std;
char a[1010],b[1010];
int m[27];
char c;
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=26;i++) //构造一个新的字典序
{
cin>>c;
m[c-'a'+1]=i;
}
for(int i=0;i<n;i++)
{
cin>>a>>b;
int len1=strlen(a);
int len2=strlen(b);
int len=max(len1,len2);
int j=0;
for( j=0;j<len;j++)
{
if(j==len1&&j<len2)
{
printf("<\n");
break;
}
if(j==len2&&j<len1)
{
printf(">\n");
break;
}
if(m[a[j]-'a'+1]>m[b[j]-'a'+1])
{
printf(">\n");
break;
}
if(m[a[j]-'a'+1]<m[b[j]-'a'+1])
{
printf("<\n");
break;
}
}
if(j==len) printf("=\n");
}
return 0;
}
重点就是构造一个新的字典序;然后进行比较,第一次没注意读题WA了,233333