设计返回指针值的函数,将输入的一个字符串按逆向输出。
错误代码:
#include <iostream>
using namespace std;
char* reverse(char*);
int main() {
char str[100],*p;
cin >> str;
p = str;
cout << *reverse(p); //输出字符数组最后一个元素
do{
p--; //p指针向前移位
cout << *p; //输出*p
} while (p != str); //如果p指向数组第一个元素,则跳出循环
cout << *p; //输出字符数组第一个元素
return 0;
}
char* reverse(char* a) {
while (*(a + 1) != '\0') { //让a指针指向字符数组最后一个元素(不包括\0)
a++;
}
return a;
}
错因:
调用reverse(p)时,实际上给函数传递的是p的地址,a指向p的地址,但p(主函数中的局部变量)的指向并不会改变。
正确代码:
#include <iostream>
using namespace std;
char* reverse(char*);
int main() {
char str[100],*p;
cin >> str;
p = str;
p = reverse(p); //让p指向字符数组最后一个元素(不算'\0')
cout << *p; //输出字符数组最后一个元素
do{
p--; //p指针向前移位
cout << *p; //输出*p
} while (p != str); //如果p指向数组第一个元素,则跳出循环(特别注意此时第一个元素已经输出完了)
return 0;
}
char* reverse(char* a) {
while (*(a + 1) != '\0') { //让a指针指向字符数组最后一个元素(不包括\0)
a++;
}
return a;
}
统计字符串中数字字符个数
#include <iostream>
using namespace std;
int main() {
int n = 0, c;
do{
c = getchar();
if (c >= 48 && c <= 57) {
n++;
}
} while (c != '\n');
cout << n;
return 0;
}
编写一段将n个数按输入顺序的逆序排列输出的程序,要求应用指针且不另外开设数组。
#include<stdio.h>
#define maxsize 200
int main()
{
int a[maxsize],n,data,*p;
p = a;
printf("您将输入多少个数:\n");
scanf_s("%d", &n);
printf("请输入数据:");
for (int i = 0;i<n; i++) {
scanf_s("%d", &data);
a[i] = data;
p++;
}
p--;
do {
printf("%d ", *p);
p--;
} while ((p != a));
printf("%d ", *p);
return 0;
}
特别注意:
输入:
6
1 2 3 8 32 30
输出:
30 32 8 3 2 1