重拾C语言-指针

100 阅读2分钟

C语言-结构化的程序设计语言

1.顺序结构 2.选择~ 3.循环~

int main() {

        int ch = 0;
        //ctrl+Z
        //EOF=end of file -> -1
        while ((ch=getchar())!=EOF)
        {
                putchar(ch);
        }

        return 0;  
}


image.png

int main() {

        int ret = 0;
        int ch = 0;
        char password[20] = { 0 };
        printf("请输入密码:>");
        scanf("%s",password);
        //getchar();//读取一下'\n'
        while ((ch=getchar())!='\n') {
                ;
        }
        printf("请确认Y/N:>");
        ret=getchar();
        if(ret=='Y')
        {
                printf("确认成功");
        }
        else 
        {
                printf("放弃确认");
        }


        return 0;  
}

数组作为参数传入函数

#include<stdio.h>
int SumOfElements(int A[],int size)
{
        int i, sum = 0;
        for (i = 0; i < size; i++)
        {
                sum += A[i];

        }
        return sum;
}
int main() 
{
        int A[] = { 1,2,3,4,5 };
        int size = sizeof(A) / sizeof(A[0]);
        int total = SumOfElements(A,size);
        printf("sum of elements = %d\n", total);
        return 0;  
}

image.png

在函数里计算数组大小 结果就不正确了

#include<stdio.h>
int SumOfElements(int A[])
{
        int i, sum = 0;
        int size = sizeof(A) / sizeof(A[0]);
        for (i = 0; i < size; i++)
        {
                sum += A[i];

        }
        return sum;
}
int main() 
{
        int A[] = { 1,2,3,4,5 };
        int total = SumOfElements(A);
        printf("sum of elements = %d\n", total);
        return 0;  
}

image.png

因为数组作为参数传入函数,只会传入一个整型的指针变量,也就是main函数中的数组A的首元素的地址;这里不是拷贝变量的值,仅仅是拷贝变量的地址,首个元素的地址,因此,这里是传引用,数组总是作为引用传给函数,数组有的很大,如果都传给函数,拷贝数据过多耗费大量内存。

通过对于数组解引用,可以实现对于数组值的改变:

#include<stdio.h>
void Double(int A[],int size)
{
        int i, sum = 0;
        for (i = 0; i < size; i++)
        {
                A[i] = 2 * A[i];

        }
}
int main() 
{
        int A[] = { 1,2,3,4,5 };
        int size = sizeof(A) / sizeof(A[0]);

        Double(A,size);
        for (int i = 0; i < size; i++) {
                printf("%d ",A[i]);
        }
        return 0;  
}

image.png

字符数组

字符串是一组字符连成的。

image.png

int main() 
{
        //初始化字符数组
        char C[20] = {"JHON"};//结尾自动补\0
        char C[] = { "JHON" };//结尾自动补\0
        char C[] = { 'J','H','O','N','\0' };//结尾不会自动补\0,需要显式的自己补全,不然err
        //int len = strlen(C);//打印字符串长度,到\0为止,不包括\0
        //printf("%s", C);
        return 0;  
}

image.png

image.png

image.png

#include<stdio.h>
void Print(char C[])
{
        int i=0;
        while (C[i] != '\0')
        {
                printf("%c", C[i]);
                i++;
        }
        printf("\n");
}
int main() 
{
        char C[20] = "Hello";
        Print(C);
        return 0;
}


传入函数的数组,变成了字符指针

void Print(char C[])  //char C[]=char* C
{
        while(*C!='\0')
        {
                printf("%c",*C);	      
                C++;
        }
        printf("\n");
}
int main() 
{
        char C[20] = "Hello";
        Print(C);
        return 0;
}

image.png

image.png

image.png

image.png

image.png

image.png image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

#include<stdio.h>
void Print(char C[])
{
        C[0] = 'A';
        while(*C!='\0')
        {
                printf("%c",*C);
                C++;
        }
        printf("\n");
}
int main() 
{
        char C[20] = "Hello";
        //char* C="hello";//字符常量不可进行修改
        //C[0]='A';//result:err
        Print(C);
        return 0;
}

根据B站fengmuzi2003**上传的C语言指针视频学习