• C语言指针练习


    • 王阳明说过“知行合一”。相信大家都听老师讲过指针,讲的时候听懂了,自己写代码就不会了。所以整理了一些题目供大家练习!

    一、指针指向地址和赋值

    #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
    ", a, b);
      printf("%d,%d
    ", &a, &b);
      printf("%d,%d
    ", *pointer_1, *pointer_2);//取指针指向的值
      printf("%d,%d
    ", &pointer_1, &pointer_2);
      printf("%d,%d
    ", pointer_1, pointer_2);
    }
    //输出
    100,200
    -751756,-751760
    100,200
    -751764,-751768
    -751756,-751760
    
    • &:而这玩意叫做取址操作符
      • :这玩意叫做取值操作符
    • p1指向变量a的地址,所以a前面要加地址符&
    • p2指向变量b的地址
      • p1指向变量a的地址中的元素(值)
      • p2指向变量b的地址中的元素(值)

    二、修改指针指向的地址

    #include"stdio.h"
    int main(){
      int a=12,*p;
      p=&a;//指向a的地址
      printf("%d
    ",*p);//输出p指向a的地址中的值12
      int b=56;
      p=&b;//改变指针p指向的地址为b的地址
      printf("%d
    ",*p);//输出p指向b的地址中的值56
      printf("%d %d
    ",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("括号数不满足");
      }     
    }
    

    九、插入排序


    ❤️有则改之,无则加勉。如有错误、建议、疑问,评论或联系飞沙QQ:2602629646
    ❤️本文来自作者:MrFlySand,转载请注明原文链接:https://www.cnblogs.com/MrFlySand/p/13589133.html

  • 相关阅读:
    C#--带参SQL语句数通用数据访问类
    VS 2017产品密匙
    关于编码中的字符和字节问题
    关于C++中的cin用法
    C++基础(一、基本语法,Hello World)
    Oracle查看用户所在的表空间
    静态变量、枚举、以及静态代码块的使用场景
    Java 枚举(enum) 详解7种常见的用法
    第一章 对象和封装
    摘抄Java反射
  • 原文地址:https://www.cnblogs.com/MrFlySand/p/13589133.html
Copyright © 2020-2023  润新知