Bliner'Site Bliner'Site

高树靡阴,独木不林。


  • 首页

  • 分类 10

  • 标签 36

  • 归档 214

  • 关于我

  • 搜索

标签:考研

C语言中的指针-字符串指针变量和字符数组的比较-学习笔记-34

发表于 2018-10-10 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 64

引入

上面我们引入了很多例子,发现字符指针和字符数组仿佛使用起来差不多,真的是这样嘛?其实并不是,我们来细数字符指针和字符数组之间的区别吧!

组成

字符指针和字符数组的组成上,有很大的不同。
字符指针:存放的是地址,是字符串首元素的地址。
字符数组:存储的是数组中的所有元素。

赋值方式

字符指针:我们可以对指针赋值,赋值一个新的地址给指针。
字符数组:我们不能给一个数组名赋值,职能给某一个数组元素赋值。

//对字符指针变量赋值;
char *a="Hello!";
a="Hello";  //注意,这里不是*a,因为要把这个字符串的首地址给 a,a 是指针,只能接收地址。

//对字符数组赋值
char str[20]="Hello!";
str[2]="C";

//下面的方式就是错误的
str="I am Chinese!"
我们无法对数组名直接赋值。
阅读全文 »

C语言中的指针-通过指针引用字符串-学习笔记-33

发表于 2018-10-10 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 108

引入

前面,我们知道数组和指向数组的指针都可以作为函数参数,那么字符指针能否作为函数参数呢?答案是肯定的。
在 C 语言中,如果我们需要传递字符串,其实传递的是该字符串首元素的地址,这样我们顺着地址移动指针就可以找到这个字符串了。
因为我们传递的是地址,所以改变了该地址后面的元素内容后,主调函数也会同时改变。

函数调用的方式实现字符串复制

用函数调用的方式,实现字符串的复制。

#include <stdio.h>
int main(){
    void copystr(char a[],char b[]);
    char str_a[]="I am Chinese!",str_b[20];
    copystr(str_a,str_b);
    printf("%s\n",str_b);
    return 0;
}
void copystr (char a[],char b[]){
   int i;
    for(i=0;a[i]!='\0';i++){
        b[i]=a[i];
    }
    b[i]='\0';
}
阅读全文 »

C语言中的指针-通过指针引用字符串-学习笔记-32

发表于 2018-10-09 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 68

引入

我们经常使用字符串,printf 中 " " 双引号之间 的内容可以直接输出,如今我们学习了指针的概念,通过指针来引用字符串,可以更加灵活和方便。

如何引用字符串?

我们知道,在 C 语言中,字符串是存放在数组中的,想要引用一个字符串,可以有一下两种方法:

用字符数组存放一个字符串

#include <stdio.h>
int main(){
    char str[]="Hello"; //这里的 str 数组大小可以省略
    printf("%s\n",str);
    for(int i=0;i<10;i++){
        printf("%c",str[i]);
    }
    printf("\n");
    return 0;
}

我们可以在printf 中用 %s 输出,也可以通过数组名和下标方式引用该字符串。

阅读全文 »

C语言中的指针-指向多维数组元素的指针变量-学习笔记-31

发表于 2018-10-09 | 分类 笔记&教程 | 评论数: 1 | 阅读次数: 57

引入

我们现在搞清楚了数组的地址以及如何使用指针来调用数组和数组元素,现在我们用指向数组的指针作为函数的参数,看看有什么新玩法!

用指向数组的指针作为函数参数

一维数组和多维数组的数组名可以作为函数参数。我们如果使用指针变量作为形参,那么接收到的是从实参发送过来的地址。
传送地址有两种方法:

  1. 用指向变量的指针变量,这就是变量的地址。
  2. 用指向一维数组的指针变量,这就是该数组的首地址。

举个例子

问题:

有一个班,3名学生,各学4门,计算总平均分,以及第n个学生的成绩。

思路:

3个学生,各学4们,这就是一个 3X4 的多维数组。
计算第 n 个学生的成绩,这就是知道行元素,求列元素的总和。

解题:

#include <stdio.h>
int main(){
    int ave(int *pointer_list);
    int search(int (*p)[4],int n);
    int list[3][4]={{88,44,66,100},{66,88,97,78},{88,99,98,78}};
    int i;
    printf("总平均分是:%d\n",ave(*list));
    printf("请输入要查询的考生编号:\n");
    scanf("%d",&i);
    printf("%d号考生的总成绩是:%d",i,search(list,i));
    return 0;
}

int ave(int *pointer_list){
    int count=0;
    int *num_end;
    num_end=pointer_list+12;
    for(;pointer_list<num_end;*pointer_list++){
        count=count + *pointer_list;
    }
    return count/12;
}
int search(int (*p)[4],int n){
    int count=0;
    for(int i=0;i<4;i++){
        count=count+*(*(p+n)+i);
        printf("%d ",*(*(p+n)+i));
        if (i==3) {
            printf("\n");
        }
    }
    return count;
}
阅读全文 »

C语言中的指针-指向多维数组元素的指针变量-学习笔记-30

发表于 2018-10-08 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 32

引入

前面,我们介绍了多维数组地址的概念,现在我们就学习如何用指针指向多维数组的元素。

例子

我们看一个例子:
有一个 3X4 的二维数组,要求用指向元素的指针变量输出二维数组各个元素的值。

#include <stdio.h>
int main (){
    int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
    int *pointer_a=a[0];
    int i=0;
    while(i<12){
        printf("%d\n",*(pointer_a+i));
        i++;
    }
}

上面,我们让指针变量 pointer_a 指向了 a[0]的地址,然后通过不断的+1来向后移动指针,输出我们需要的内容,这种顺序输出比较简单。

阅读全文 »

C语言中的指针-指针引用多维数组-学习笔记-29

发表于 2018-10-08 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 34

引入

前面我们知道,指针可以指向一维数组中的元素,同样的,指针也可以指向多维数组。这个概念比较绕,要清楚不同层的地址,以及不同的*号所指向的值,以及灵活运用数组名即首元素地址这一概念。

还记得多维数组吗?

之前我们引入过多为数组的概念,很像行列式,例如:

int a[2][3]={{1,2,3},{4,5,6}}
//这就是一个简单的二维数组,2行3列

上面的 a 是数组名
a 数组包含2个行元素:a[0] 和 a[1]。
上面的每一个行元素又都是一个一维数组
每一个行元素又包含3个列元素:a[0][0] 、a[0][1] 和 a[0][2]

我们可以理解为,二维数组是数组的数组,上面这个二维数组是由 2 个一维数组组成的,a[0] 和 a[1] 就是这两个一维数组的数组名。

阅读全文 »

C语言中的指针-数组名作为函数参数指针-学习笔记-28

发表于 2018-09-25 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 41

数组名和指针

我们先来捋一遍数组名和指针。数组名是该数组的首元素起始地址,说白了,也是一个地址,但这个地址是不变的,是固定的是一个常量,数组名后面附加角标,叫可以表示该数组中的某一个元素的值。指针是指向某一变量或数组的地址,和数组名一样,都是地址,但指针的内容是可以改变的,指针前加*号就可以表示这个地址所指向的数据的值。

所以,我们现在知道了,数组和指针都表示的是一个地址。

数组名作为函数参数

我们照旧从一个例子出发,来理解这个概念,我们输入5个数到一个数组中,并且将数组中的5个数从大到小存储在数组中,接着依次输出这5个数。

#include <stdio.h>
int main(){
    void arr(int num[]);
    int array[5];
    for(int i=0;i<5;i++){
        scanf("%d",&array[i]);
    }
    arr(array);
    for(int i=0;i<5;i++){
        printf("%d\t",array[i]);
    }
    return 0;
}
void arr(int num[]){
    int big;
    for(int i=0;i<5;i++){
        for(int k=0;k<4;k++){
            if(num[k]<num[k+1]){
                big=num[k+1];
                num[k+1]=num[k];
                num[k]=big;
            }
        }
    }
}
阅读全文 »

C语言中的指针-通过指针引用数组元素-学习笔记-27

发表于 2018-09-20 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 42

引用数组元素

前面我们学习了,引用数组有两种方式:
下标法:a[i]
指针法:(a+1) / (p+1)
今天我们实际来通过这两种方式引用一下数组元素看看能有哪些不同。

例题-1

有一个整形数组 a,有10个元素,要求输出数组中的全部元素。

思路

现在我们会使用3中方法,下标法、数组名计算元素地址、指针变量指向数组元素。

下标法

#include <stdio.h>
int main(){
int a[10]={1,2,3,4,5,6,7,8,9,10};
for (int i=0;i<10;i++){
printf("%d\n",a[i]);
}
return 0;
}

我们通过遍历数组的下标,输出数组。

阅读全文 »

C语言中的指针-数组元素的指针-学习笔记-26

发表于 2018-09-20 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 29

通过指针引用数组元素

前面我们说变量有指针,那么数组元素有没有指针呢?数组元素也有指针,并且我们也可以通过指针来引用数组元素。

数组元素的指针

我们说一个变量是有地址的,数组包含了很多的元素,每个元素都在内存中占用存储单元,这些数组元素也都有相对应的地址,指针可以指向变量也可以指向数组。所谓数组元素的指针,就是数组元素的地址。

使用数组指针

int a[5]={1,2,3,4,5};  //定义了包含5个元素的数组
int * p;  // 定义了一个指针变量 p
p=&a[0];  //将数组的第一个元素地址传递给指针变量

我们看到,其实和变量指针类似,只不过我们这里给指针变量的地址是数组元素的地址。平时,我们引用数组元素采用的都是下标法即通过数组名+元素下标的方式表示数组。现在,我们也可以使用指针法,即通过指向数组元素的指针来找到所需要的元素。

阅读全文 »

C语言中的指针-指针变量作为函数参数-学习笔记-25

发表于 2018-09-17 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 28

指针变量作为函数参数

我们说过,函数参数可以是变量,那么既然指针变量也是变量的一种,能否作为函数的参数呢?答案是肯定的!而指针变量作为函数参数的主要作用是,将变量地址传送到函数中。

从例子引入

我们通过两个使用指针变量作为函数参数的例子,来引入我们今天的内容。

问题

输入两个数,返回其中的较大者,设计一个自定义函数进行比较,要求使用指针变量作为函数参数。

解答

#include <stdio.h>
int main(){
    int a, b;
    int abmax(int * pointer_1, int * pointer_2);
    //声明了一个指针变量作为参数的函数
    int * a_pointer, * b_pointer;
    printf("请输入两个数:\n");
    scanf("%d %d",&a,&b);
    a_pointer=&a;
    b_pointer=&b;
    //给指针变量赋值
    printf("%d 和 %d 中较大的是:%d\n",a,b,abmax(a_pointer, b_pointer));
    return 0;
}

int abmax(int *pointer_1, int *pointer_2){
    if (*pointer_1>*pointer_2){
    //接收到指针变量的地址后,对比该地址的数据内容
        return (*pointer_1);
    }else{
        return (*pointer_2);
    }
}
阅读全文 »
上一页 1 ... 10 11 12 ... 14 下一页
Bliner

Bliner

214 日志 10 分类 36 标签
RSS

推荐阅读

关于GTD中项目“复盘”的一想法
© 2008 - 2026 Bliner
鲁ICP备13021673号