C语言基础知识备忘

数组:

  1. 声明并初始化赋值:
int  array1[5] = {1,2,3,4,5}; //一维数组,默认5个元素。
int array11[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //二维数组,3行4列。
char array2[5] = {'L','O','V','E','U'}; //字符赋值。
char array3[] = "LOVEU"; //字符串赋值。
  1. 赋值:
int  array1[5] = {1,2,3,4,5}; //法一:初始化时就赋值。
array1[4] = 4; //法二:以后单独赋值。
  1. PS:
1 .初始化赋值的时候可先赋值一部分,剩余的部分是\0即结束符。
int  array1[5] = {1,2};
2 .声明数组可以先不说明多少元素:
int  array1[] = {1,2,3,4,5}; //那么就是5个元素,数组长度为5.
3 .问:字符串数组和字符数组区别:
答:大致相同,但是字符串数组最后一个元素存\0 结束符,
使用sizeof()计算长度发现字符串长度比字符长度多一个。

指针:

变量、数组、函数等都是存在于计算机内存中。内存中存放的位置就叫做地址。地址由一系列编号组成,所以又称为指针。

1.指针变量。用*
int *p1; //指向整型变量的指针变量p1.
float *p2; 
char *p3; 

2.取地址运算符,&
int a=88;  //初始化变量a为88。
int *p; //定义一个指针变量。
p = &a; //取得变量a所存放的地址,并且赋值给指针变量p1.
printf("%d\n",*p); //p代表地址,*p代表这个地址中存放的内容。

3.野指针和NULL.
初始化的指针如果没有指向的话就是野指针,很危险,可以先赋值为NULL。

4.分配内存的函数。
p = (int *)malloc(99); //指针变量p,指向的变量类型为int,分配了99个内存空间。
free(p); //使用后释放内存空间。

5.数组的指针:
int a[5] = {1,2,3,4,5};
int *p;
p = &a[0];  //p指向数组的首地址。
p= a;  //等同上面,p指向数组的首地址。

6.字符串的指针:
char *ps = "love";  //ps指向字符串的首地址。
printf("%s \n",ps); //"love"
printf("%c \n",*ps); //"l"
printf("%c \n",*(ps+1)); //"o"

7.指针用途,节约内存空间。
  char *pc[3] = {
            "love",
            "loveu",
            "loveuu"
    };
    for (int i=0; i<3; i++) {
        printf("%s \n", pc[i]); //逐行打印。
    }
    return 0;

函数

//函数要先声明,然后定义,然后就可以使用了。(递归函数见下)。
#include 
int sum(int); //函数先声明。
int main(){
    int n = 100, s = 0;
    s = sum(n);
    printf("%d\n", s);
}

int sum(int n){
    if (n == 1) {
        return 1;
    }else{
        return n+sum(n-1);
    }
}

变量

static静态变量,static int a = 6;,主要作用于局部变量,用于延长局部变量的生命周期。
extern,主要用于全局变量和函数。用于变量提升。

#include 
int main(void){
    extern int a; //没有这句的话就会显示“无法使用未声明的变量。”
    printf("%d \n",a);
}
int a = 11;

参数

指针做参数:
#include 
void swap(int *p, int *q);
int main(){
    int a=100,b=200,*p1=&a,*p2=&b;
    printf("main调用swap之前*p1:%d, p2:%d.\n",*p1,*p2);
    swap(&a, &b);
    printf("main调用swap之后*p1:%d, p2:%d.\n",*p1,*p2);
    return 0;
}
void swap(int *p, int *q){
    int temp;
    temp = *p;
    *p = *q;
    *q = temp;
    printf("在swap函数中置换后*p:%d, q:%d.\n",*p,*q);
}

#运行结果#:
main调用swap之前*p1:100, p2:200.
在swap函数中置换后*p:200, q:100.
main调用swap之后*p1:200, p2:100.
Program ended with exit code: 0

指针函数

#include 
char *substring(char s[], int, int);
int main(){
    char string[] = "I Love U";
    char *ps = NULL;
    ps = substring(string, 2, 7);
    printf("%s\n",ps);
    return 0;
}

char *substring(char s[], int i, int j){
    static char temp[100];
    int m,n;
    for (m=0, n=i; n<=j; m++,n++) {
        temp[m] = s[n];
    }
    temp[m] = '\0';
    return temp;
}

##运行结果:
Love U
Program ended with exit code: 0

结构体:

基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。

你可能感兴趣的:(C语言基础知识备忘)