- 王阳明说过“知行合一”。相信大家都听老师讲过指针,讲的时候听懂了,自己写代码就不会了。所以整理了一些题目供大家练习!
一、指针指向地址和赋值
&
:取址操作符
*
:取值操作符
p1
指向变量a
的地址,所以a前面要加地址符&
p2
指向变量b
的地址
*p1
指向变量a的地址中的元素(值)
*p2
指向变量b的地址中的元素(值)
#include <stdio.h>
int main(){
int a, b;
int *pointer_1, *pointer_2;
a=100;
b=200;
pointer_1 = &a;//将a的地址赋给p1
pointer_2 = &b;//将b的地址赋给p2
printf("%d,%d\n", a, b);
printf("%d,%d\n", &a, &b);
printf("%d,%d\n", *pointer_1, *pointer_2);//取指针指向的值
printf("%d,%d\n", &pointer_1, &pointer_2);
printf("%d,%d\n", pointer_1, pointer_2);
}
//输出
100,200
-751756,-751760
100,200
-751764,-751768
-751756,-751760
二、修改指针指向的地址
#include"stdio.h"
int main(){
int a=12,*p;
p=&a;//指向a的地址
printf("%d\n",*p);//输出p指向a的地址中的值12
int b=56;
p=&b;//改变指针p指向的地址为b的地址
printf("%d\n",*p);//输出p指向b的地址中的值56
printf("%d %d\n",a,b);//原变量值不变,输出12 56
}
//输出
12
56
12 56
三、指针字符串
#include"stdio.h"
#include "string.h"
int main(){
char *word = "MrFlySand.github.io";
for(int i = 0; i < strlen(word); i++){
printf("%c ",*(word+i));
}
}
//输出
M r F l y S a n d . g i t h u b . i o
- strlen()获取字符串的长度,strlen(word)=19.
#include"stdio.h"
#include "string.h"
int main(){
char *word = "MrFlySand.github.io";
while(*word){
printf("%c ",*(word++));
}
}
- while(p) 等价于while(p !=0) 检查的是p值是不是0,或者是不是空指针,如果是,则跳出循环,不再继续循环体
- while( * p) 相当于while( * p != 0) 检查的是p所指向的地址中的数据是否为0,但前提是p不能为NULL
#include"stdio.h"
#include "string.h"
int main(){
char *word = "mr fly sand";
printf("%c",*(word)-32);
for(int i = 1; i < strlen(word); i++){
if(*(word+i-1)==' '){
printf("%c",*(word+i)-32);
}else{
printf("%c",*(word+i));
}
}
}
//输出
Mr Fly Sand
四、编程:句子的第一个字母,','之后的字母,空格之后的字母都是大写。
#include"stdio.h"
#include "string.h"
void stringConversion(char *word){
for(int i = 0; i < strlen(word); i++){
if(i==0 || *(word+i-1)==' ' || *(word+i-1)==','){
if(*(word+i)>='a' && *(word+i)<='z'){
printf("%c",*(word+i)-32);
}else{
printf("%c",*(word+i));
}
}else{
if(*(word+i)>='A' && *(word+i)<='Z'){
printf("%c",*(word+i)+32);
}else{
printf("%c",*(word+i));
}
}
}
}
int main(){
char *word = "hello,mY namE Is mr FLY sAnD";
stringConversion(word);
}
//输出
Hello,My Name Is Mr Fly Sand
五、找最大最小值
#include"stdio.h"
void findMaxMin(int *pa){
int max=*pa,min=*pa;
for(int i=0; i<=sizeof(pa); i++,pa++){
if(*pa > max){
max = *pa;
}else if(*pa < min){
min = *pa;
}
}
printf("max = %d,min = %d",max,min);
}
int main(){
int arr[5] = {12,46,37,74,2}, *pa = arr;
findMaxMin(pa);
return 0;
}
六、字母排序
#include"stdio.h"
#include "string.h"
int main(){
char *word= "MrFlySandgithubio";
int i,j;
char temp;
for(i=0; *word; i++){
for(j=0; *word; j++){
printf("",*word(i)>*word(i+1));
if(*word(i)>*word(i+1)){
temp = *word(i);
*word(i) = *word(i+1);
*word(i+1) = temp;
}
printf("%d ",*word++);
}
}
return 0;
}
七、统计字符串中每个字母出现的次数
八、括号相同
- 检查字符串是否满足下列条件:①从字符串首字符起,在顺序检查字符的过程中,遇到的右括号')'的个数在任何时候均不超过左括号'('的个数;②左括号'('的个数与右括号')'的个数相同。
#include <stdio.h>
int check(char *s){
int left,right;
left=right=0;
for(;*s;*s++){
if(*s=='('){
left++;
}else if(*s==')'){
right++;
if(right>left){
return 1;
}
}
}
return right-left;
}
int main(){
char s[80];
gets(s);
int i;
i=check(s);
if(i==0){
printf("括号数满足");
}
else{
printf("括号数不满足");
}
}
九、插入排序