Dec-c语言字体大小,C语言入门到进阶(指针介绍) 6th/Dec./2019

主要内容

1、什么是指针,指针的作用是什么?

2、指针的类型

3、指针的值

4、指针指向的值(区域)

5、指针的运算

6、指针和数组

7、指针和函数

1、什么是指针,指针的作用是什么?

定义:指针是一个变量,这个变量只能存地址,指针变量占据8个空间字节

作用:在函数之间传递数据(>1的多个数据)给调用者

*的用法:

1、定义的时候表明是一个指针变量

2、使用的时候,表示   取地址的值(或指针指向的区域的值)

e.g

int temp = 10;

int *p = &temp; //定义指针变量

*p = 20; //取地址的值

&作用:取地址

2、指针的类型

1、判断指针类型的一个简单方法:去掉*和变量名,就是指针的类型

2、指针变量只能指向同种数据类型的地址

e.g

int *p;//整型指针

char *p;//字符指针

int (*func)(int);//函数指针

3、

1、普通指针常量e.gint *pa;

2、常量指针(常量不变,指针指向的值是不能变的)

e.g

int a = 20;

int b = 30;

int const *pa = &a;//常量指针

*pa = 50;//错误,不能改变指针指向的变量的值

pa = &b;//正确,可以改变指针的指向

3、指针常量(数组就是指针常量的一个例子)

(指针不能变,永远指向某一个类型的数据)

int b = 30;

int a = 20;

int * const pb = &a;

*pb = 50;//正确,可以改变指针指向的变量的值

pb = &b;//错误,不能改变指针的指向

4、指向常量的常量指针(既不能改变指针指向的变量的值,又不能改变指针的指向)

int a = 20;

int b = 30;

int const * const pc = &a;

*pc = 50;//错误,不能改变指针指向的变量的值

pc = &b;//错误 ,不能改变指针的指向

3、指针的值

就是指向的内存空间的首地址

4、指针指向的值(区域)

一级指针:指向一个普通变量

int a = 20;

int *pa = &a;

二级指针:指向一个地址

int a = 20;

int *pa = &a;

int * *pb = &pa;

int ** *ptemp = &pb;

1、访问a的值的方法:

a = 30;

*pa = 30;

**pb = 30;

***ptemp = 30;

2、访问pb的值方法:

pc;

*ptemp;

5、指针的运算

指针是一个用数值表示的地址,可以对指针执行算术运算:++ -- - +

e.g

int num[] = {1,2,3,4,5,6,7,8,9};

*(num+1) = 20//将num[2]的值改为20

*(num++) = 20//错误 原因:数组是一个指针常量,数组的指向不能改变即等价于不能对指针名进行运算

(*num)++ = 20;//错误 原因:2 = 20;

6、指针和数组

数组名:num就是数组的首地址(打印地址 %p),数组名本身没有分配内存空间,

sizeof(num)计算整个数组的内存空间,数组是一片连续的内存空间

指针只是一个变量(存地址)

两者的共同点数组也可以用指针的方式访问

访问第一个元素

num[0] = 20;

*num = 20;

访问第二个元素

num[1] = 30;

*(num + 1) = 30;

*num + 1 = 30; //错误 1+ 1 = 30;

注:

1、在指针中,若不确定运算符优先级的情况下,加圆括号,来分清结合方式

2、数组是一个指针常量,指针的指向不能改变(即不能对数组名进行运算)

7、指针和函数

指针的作用:通过指针间接访问某个内存

定义一个函数,什么情况下参数是指针?

这个函数会不会改变传递过来的数据本身,若需要改变外部的值,就将该变量定义为指针变量

e.g改变int型变量的值

#include

void test(int *pa, int *pb){

(*pa)++;

(*pb)++;

}//通过指针存储地址,通过指针就可以直接改变指向的变量的值,就不需要返回值

int main(){

int a = 20;

int b = 30;

test(&a, &b);

printf("a:%d, b:%d",a,b);

return 0;

}

e598313cc381

运行结果

e.g改变数组中各个元素的值,分别加1

注:

1、函数接收数组时,必须知道数组元素个数,函数里面是通过指针变量来接收数组的地址,指针变量无法确定指向的内容的大小

2、访问数组的两种方式

a、num[3];

b、*(num + 3);

#include

//void test2(int p[], int count)

void test2(int *p, int count){

for(int i = 0; i < count; i++){

(*(p+i))++;

//p[i]++;

}

}

int main(){

int num[5] = {1,2,3,4,5};

for(int i = 0; i < 5; i++){

printf("%d ",num[i]);

}

printf("\n");

test2(num,5);

for(int i = 0; i < 5; i++){

printf("%d ",num[i]);

}

return 0;

}

e598313cc381

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值