指针的应用

本文详细介绍了C语言中的指针变量,包括定义、引用、作为函数参数的使用,以及如何通过指针引用数组和字符串。还探讨了如何在函数中通过指针改变数组值,以及字符指针在字符串操作中的应用。最后,对比了字符数组和字符指针的差异,并展示了在实际编程中的使用示例。
摘要由CSDN通过智能技术生成

一.指针变量

指针变量是一种存放地址的特殊变量。

从变量的角度来讲,指针变量也具有变量的要素。

指针变量的类型,是指针变量所指向的变量的类型,而不是自身的类型。

1.定义指针变量:

类型名*指针变量名

2.引用指针变量:

给指针变量赋值:p = &a,指针变量p的值是a的地址。

引用指针变量所指向的变量,若执行了p = &a,则printf(“%d”,*p);作用为以整数形式输出指针变量p所指向的变量的值,即变量a的值。

引用指针变量的值,printf(“%o”,p);输出a的地址

二.指针变量作为函数参数

如果想通过函数调用得到n个要改变得值,可以这样做

1.在主调函数中设置n个变量,用n个指针函数指向他们。(p = *a)

2.设计一个函数,有n个指针形参,在这个函数中改变n个形参的值。

3.在主调函数中调用这个函数,在调用时将这n个指针变量作为实参,将他们的地址传给该函数的形参。

4.在执行函数的过程中,通过形参指针变量,改变他们所指向的n个变量的值。

5.主调函数中就可以使用这些改变了的值得变量了。

三.通过指针引用数组

1.数组名代表数组中首元素的地址,因此

p = &a【0】;与

p = a;等价

2.在指针指向数组变量时,可以对指针进行以下运算

p+1;p-1;p++;p--;

p+1指向同一数组的下一个元素

3.p+i与a+i都表示a[i]的地址

*(p+i)与*(a+i)与a[i]三者等价

注意:可用p++但是不能用a++,因为此时a是一个指针常量,其指向的地址不能改变;

下标法表示组a【i】;指针法表示数组*(a+i)或者*(p+i),其中a是数组名,p是指向数组元素的指针变量,其初值p=a

使用*(p+i)之前必须先使p = a

四.用数组名做函数参数

当用数组名做函数参数时,在函数调用期间,形参数组实参数组那里得到起始地址因此形参数组和实参数组共用一段内存单位,在调用期间如果改变了形参数组的值,也就是改变了实参数组的值。

五.字符串的引用方式

1.用字符数组存放一个字符串,可以通过数组名和下标引用字符串的一个字符,也可以通过数组名格式声明“%s”输出该字符

#include<stdio.h>
int main(){
    char string[]="I love Shiyanlou!";

    printf("%s\n",string);
    printf("%c\n",string[9]);

    return 0;
}

2..用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串常量

#include<stdio.h>
int main(){
    char * string="I love Shiyanlou!";

    printf("%s\n",string);

    return 0;
}

六.字符指针做函数参数

被调函数中改变字符串内容,主调函数中可以引用改变后的字符串,在函数调用实现字符串的复制

#include<stdio.h>
int main(){
    void copy_string(char *from,char *to);
    char *a = "I am a teacher";
    char b[] = "You are a programmer";
    char *p = b;

    printf("string a=%s\nstring b=%s\n",a,b);
    printf("copy string a to string b:\n");
    copy_string(a,p);
    printf("\n string a=%s\n string b=%s\n",a,b);

    return 0;
}

void copy_string(char *from,char *to){
    for(;*from!='\0';from++,to++)
           *to = *from;
    *to = '\0';
}

七.使用字符指针变量和字符数组的比较

1.字符数组由若干元素组成,每个元素中放一个字符,

   而字符指针变量中存放的是一个地址

2.赋值方法:

        可以对字符指针变量赋值

          不能对数组名赋值

3.存贮单元的内容:

可以对字符数组分配若干个存储单元,以存放各元素的值

对字符指针变量只分配一个存储单元

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值