C语言指针复习

我们知道,指针是C语言中的一个重要概念,也是C语言的一个重要角色。

主要体现在:

1、可以有效地表示复杂的数据结构

2、能够动态的分配内存

3、方便的使用字符串

4、有效而方便的使用数组

5、在调用函数的时候能获得1个以上的返回结果

6、能够直接处理内存单元地址等

掌握指针的应用,可以使程序简洁、紧凑、高效。


一、指针变量的定义

    1. 定义方式: 类型标识符 *指针变量名;
    2. 指针变量的三要素:

指针变量的类型:和其所指变量的类型一致

指针变量的值:另一个变量在内存的地址

指针的名字:起名同普通变量

           3.说明:标识符前面的*,表示该变量是指针变量,但是*后才是指针变量的名字。

       二、指针变量的赋值

           1.指针变量名=某一地址;(&取某一地址符)

           2.指针变量名= 另一个已赋值的指针变量

//例子1
int  i = 0;
int *p = &i;//方式一
int *q = p;//方式二

             如图

        三、 指针运算

    //例子2
    int  *p,a;
    char *q,b;
    p = &a;
    q = &b;
    p++;
    q++; 
        

       p++,q++执行完成之后

       

       我们看到p移动了4个字节,而q只移动了一个字节。

     因为p指向的int型占用4个字节空间(一般情况),自加一后指向ffc4,而char型占用1个字节,所以q指向ffd1

四、修改所指向变量的值

int a = 10; 
int *p = &a;
*p = 20; 
printf("%d\n",a) ;//此时我们看到a的值通用指针将其修改为了20
五、在函数内部修改外面变量的值

void change(int *n); 

int main(){
	int a = 10;
	change(&a);

	printf("%d\n",a);
} 

void change(int *n)
{
    *n = 20;
}

六、调用函数返回多个结果

#include <stdio.h>
int change(int a, int *p);

int main()
{
    int a = 10;
    int b = 20;
    
    int rs = change(a,&b);
    printf("rs=%d, b=%d\n", rs, b);// a=20, b=30
    return 0;
}

int change(int a, int *p)
{
    *p += a;
    return a+10;
}

七、指针与数组

将数组当做函数参数传入时,会自动转为指针

void change(int array[]);

int main()
{
    int ages[5] = {10, 11, 19, 78, 67};
    
    change(ages);
    
    return 0;
}

//利用一个指针来接收一个数组,指针变量array指向了数组的首元素
void change(int *array)
{
    printf("%d\n", array[2]);
    //printf("%d\n", *(array+2));
}
八、指针与字符串

    1.定义字符串的两种方式

        ① 利用数组

char name[] = "csdntest";

          特点:字符串里面的字符是可以修改的

          使用场合:字符串的内容需要经常修改
        ②利用指针

char *name= "csdntest"
           特点:字符串其实是一个常量字符串,里面的字符是不能修改
          使用场合:字符串的内容不需要修改,而且这个字符串经常使用
     综上:数组定义字符串相当于变量,而指针定义字符串相当于常量


以上是我对C语言指针的一点理解,实乃冰山一角,有不足的地方我们可以一起学习,共同提高。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值