指针
一,指针变量做函数形参
void sort(int *p,int n)//指针变量做形参,选择排序,用指针做
{
int i = 0,j=0,k=0;
int t=0;
for (int i = 0; i < n; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if (*(p + j) < *(p + k))
k = j;
}
t = *(p + k);//*取值 &取址
*(p + k) = *(p + i);
*(p + i) = t;
}
}
void sort2(int* p, int n) //用数组[]运算
{
int i = 0, j = 0, k = 0;
int t = 0;
for (i = 0; i < n; i++)
{
k = i;
for (j = i + 1; j < n; j++){
if (p[j] < p[k])
k = j;}
t = p[k];
p[k] = p[i];
p[i] = t;
}
}
- 字符串的输出
str是数组名,输出到\n结束。
- 函数与指针
int max(int i, int j)
{
if (i < j)
{ int t = i;
i = j;
j = t;}
return i;
}
int main()
{
int a=0;
int(* p)(int, int);
p = max;
a = p(5, 7);
cout << a << endl;
return 0;
}
*** 区别***
int (*p)(int , int ) 表示一个指针,指向一个返回值为Int, 函数形参为两个 Int型的的函数
int *p(int,int ) 表示返回值为整型指针。
数组与指针
【】比 *优先级高
int *p[4 ]
这里 p 先于 [4]结合,形成一个有四个元素的一维数组。
p再与前面的*结合,
那么这里的‘* ’ 表示此数组是指针类型的。有四个元素,每个元素都是指针类型,
int (*p )[ 4 ] 表示 p 是一个指针,指向一维数组的指针变量。 每个指针p 可以指向一个 一维数组。
6.8 const 指针
1.指向常量指针的指针变量
const 类型名 * 指针变量名
const int *p;
指向可以改,值不能改
(叫常量指针)
int a=0;
int &b=a;
b 是a 的别名。
只有在初始化的时候是引用,其他都是取地址符
char & a =c;
char *p =&c;
谭浩强课本练习
把十个数字排序,最大的和最后一个换,最小的和第一个换
#include <iostream>
using namespace std;
void print(int* i,int n)
{
for (int j = 0; j < n; j++)
cin >> *(i + j);
return;
}
void out(int* i, int n)
{
for (int j = 0; j < n; j++)
cout<< *(i + j)<<" ";
return;
}
void sort(int* a, int n)
{
int max = 0;
int min = 9999;
int k = 0;
int j = 0;
for (int i = 0; i<10; i++)
{
if (*(a + i) > max)
{
max = *(a + i);
k = i;
}
}
for (int i = 0; i < 10; i++)
{
if (*(a + i) < min)
{
min = *(a + i);
j = i;
}
}
int t = *(a + j);
*(a + j) = *(a);
*a = t;
int m = *(a + k);
*(a + k) = *(a + 9);
*(a + 9) = m;
return;
}
int main()
{
int a[10];
print(a,10);
sort(a,10);
out(a, 10);
return 0;
}
多维数组
这里就是分清行指针和列指针
字符指针问题
输入一行字符串,将字符串中所有下标为奇数位置上的字母转换为大写(若不是小写字符则不必转换)。
void change(char *pchar)
{ while(*pchar)
{ if(*pchar>=‘a’&&*pchar<=‘z’)
*pchar=*pchar-32;
pchar++;
if(*pchar==0)
break;
pchar++;
}
}
void main(void)
{ char str[100];
cin.getline(str,100);
change(str);
cout<<str<<endl;
}
以下程序判断输入的字符串是否“回文”,若是回文,输出YES。
void main(void)
{ char s[81], cr, *pi, *pj;
int i, j, n;
cin.getline(s); n=strlen(s);
pi=; pj=;//pi指向串开始,pj指向最后
while(*pi==‘ ‘) _________;
while(*pj==‘ ‘) ________;
while( ( ___________) &&(*pi==*pj) )
{ pi++; _______; }
if((pi<pj) cout<<“NO”<<endl;
else cout<<“YES\n”;
}
这里使用 *n[5]