C语言复习(三)——指针(一)

指针在C语言中是比较重要的,个人认为,C语言中最重要的是内存,如何操作内存是至关重要的,指针是C语言的精华,学好了指针才可以说C语言入了门。接下来认真总结一下C语言中指针的用法。

指针基础

1、指针是一种数据类型

数据类型的本质是固定大小内存块的别名,指针毫无例外,指针也是占有内存空间的,在32位机器中,指针是占4个字节的,指针存储的是一个地址,通过这个地址可以访问到一段内存空间。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int main(void)
{
	int *p = NULL;
	char *s = NULL;
	printf("%d %d", sizeof(p), sizeof(s));
	system("pause");
	return 0;
}

2、指针变量

指针也是一种变量,它的值为另一个变量的地址。

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;     /* 一个字符型的指针 */

不同类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

*号

在指针声明时,*号表示所声明的变量为指针;、
在指针使用时,*号表示操作指针所指向内存空间中的值。
*p相当于通过地址(p变量的值)找到一块内存;然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)

3、指针变量和它所指向的内存块是两种不同的概念

指针变量存储的是4个字节大小的内存地址,指针所指向的内存块里存储着另一个变量的值。

4、指针的步长,根据所指向的内存空间的类型来决定。

int main(void)
{
	int *p1 = NULL;
	//int *p2 = NULL;
	char *p3 = NULL;
	float *p4 = NULL;
	int a;
	int b[10];
	char c;
	float d;
	p1 = &a;
	//p2 = &b;
	p3 = &c;
	p4 = &d;
	printf("%d %d\n", p1, p1 + 1);
	printf("%d %d\n", &b, &b + 1);
	printf("%d %d\n", p3, p3 + 1);
	printf("%d %d\n", p4, p4 + 1);
	system("pause");
	return 0;
}
注意
  1. 指针指向谁,就把谁的地址赋给指针
  2. 不断的给指针变量赋值,就是不断的改变指针变量,就是不断的修改指针的指向(和所指向的内存空间里的值无关)

间接赋值

void f(int *p)
{
	*p = 30;
}

int main(void)
{
	int a = 10;
	int *p = NULL;
	p = &a;
	*p = 20;//p的值是a的地址,通过这个地址找到一段内存空间,间接的修改了a的值;
	printf("a = %d\n", a);
	f(p);
	printf("a = %d\n", a);
	system("pause");
	return 0;
}

我们可以通过被调用函数间接的修改某一变量的值,也就是说,我们可以通过一个函数将运算的结果传出来,或许我们可以给函数加上返回值,但是函数返回值只能把一个运算结果返回,如果我们要修改两个或两个以上的变量的值呢,这样的方法显然就不适用了,这就是指针作为函数参数间接修改变量的值的精华之处。

指针、函数与内存四区

  1. 主调函数与被调函数:
    a) 主调函数可把堆区、栈区、全局数据内存地址传给被调用函数
    b) 被调用函数只能返回堆区、全局数据
  2. 内存分配方式
    a) 指针做函数参数,是有输入和输出特性的。
    输入:指针所指向的内存空间是在主调用函数中分配好的
    输出:指针所指向的内存空间是在被调用函数中分配好的
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walkerrev_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值