c语言:指针,字符串,文本文件

37 阅读2分钟

指针

  1. 用一个变量保存一个内存地址,这变量叫指针变量
  2. 一个变量中保存的不是具体的数据,而是能找到这个数据的线索
  3. 指针变量,简称指针
  4. 格式:数据类型* 变量名
  5. & 是取地址
    • 有两个作用
  6. int * 表示定义指针
  7. *p 表示取值
#include<stdio.h>
int main(){
int a  = 10; // 定义一个整型变量a,保存的内容是 10
int* p1 = &a; // 定义一个int类型的指针变量,保存的内容是a的地址。(&& 与)
int* p2 = &a;
// 打印a的地址
printf("a的地址是:%p\n", &a);
printf("a的地址是:%p\n", p1);
printf("a的值是:%d\n", *p1);
// 打印p1的地址
printf("p1的地址是:%p\n", &p1);
// 打印p1的值
printf("p1的值是:%p\n", p1);
// 打印p1指向的值
printf("p1指向的值是:%d\n", *p1);
*p1 = 20;
printf("a的值是:%d\n", a);
double b = 10;
double* p2 = &b;
return 0;
}

指针的作用

  1. 在函数内部修改外部变量的值
#include<stdio.h>
void swap(int *m,int *n)
{
    int temp=*m;
    *m=*n;
    *n=temp;
}
int main(){
    int a=10;
    int b=20;
    swap(&a,&b);
    printf("a=%d\nb=%d",a,b);
    return 0;
}
  1. 操作数组 用for循环打印字符串的元素
#include<stdio.h>
int main(){
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    int *p=arr;
    printf("%d\n",*p);
    for(int i=0;i<10;i++){
    printf("%d ",*(p+i));
}
    return 0;
}

字符串

#include<stdio.h>
int main(){
    char str[]="abcd";//5个元素,还有\0
    char str1[]={'a','b','c','d','\0'};
    //约定:遇到'\0'表示字符串结束
    //打印输出字符串用%s
    printf("%s\n",str);
    printf("%s\n",str1);
    str[0]='A';//修改
    printf("%s\n",str);
    return 0;
}
  1. scanf输入字符串 注意不要超出范围,scanf遇到空格会停止读取
#include <stdio.h>
int main() {
    char str[10];//只能存9个
    printf("请输入字符串:");
    scanf("%s", str);  // 注意:scanf遇到空格会停止读取
    printf("你输入的字符串是:%s\n", str);
    return 0;
}
  1. fgets函数 可以读取包含空格的整行文本
#include <stdio.h>
int main() {
    char str[100];
    printf("请输入字符串:");
    fgets(str, sizeof(str), stdin);
    str[strcspn(str, "\n")] = 0; // 去掉fgets读取的enter换行符
    printf("你输入的字符串是:%s\n", str);
    return 0;
}

文本文件的写入

#include <stdio.h>
int main() {
   FILE *fp;
   fp = fopen("abc.txt", "w"); 
   if (fp == NULL) {
      printf("文件打开失败");
      return 1;
   }
   fprintf(fp, "Hello, World!\n");
   fprintf(fp,"你好世界");
   fclose(fp);
    return 0;
}