嵌入式课程day13-C语言指针

目录

十、指针

10.1了解指针

10.2指针使用

10.2.1指针定义:

10.2.2指针读写操作:

10.2.3指针变量空间大小

10.2.4指针偏移:


十、指针

10.1了解指针

指针:是变量 ,存储地址编号的。

地址:内存按照 字节 进行编号,1个字节1个编号  4GB

一般地址编号用16进制表示  %p

空间:指针本身的空间  指针指向的空间

10.2指针使用

10.2.1指针定义:

指针类型 指针名;

指针类型:指针指向对象的类型 *        

指针定义的时候:* -- 是指针的标记

例子:

定义一个指针指向int型的空间,保存int型的地址。

 int * p;   // int *p;   int* p;

// 定义一个变量,变量名: p
定义一个指针指向double型空间,
double * q;

10.2.2指针读写操作:

练习1、定义一个指针指向int型的空间,保存int型的地址。

int a = 30;  // int型的空间  -- int型的地址 -- &a

定义一个指针指向a ,保存a的地址。

int * p;            

// 指针指向a ,保存a的地址

p = &a;    // p -- 指针本身的空间  *p --- 解地址 -- 指针指向的空间

#include<stdio.h>

int main (void)
{
	int a = 30;
	int* p;
	p = &a;
	printf ("%p %p\n", p, &a);
	printf ("%d %d\n", *p, a);
	*p = 100;
	printf ("%d %d\n", *p, a);
	return 0;
}

10.2.3指针变量空间大小

4/8 个字节,   32位系统 -4个字节  64位系统 -- 8个字节  指针变量空间大小和指向对象类型没有系,

实质: 指针存地址编号的。

#include<stdio.h>

int main (void)
{
	int* p;
	char* q;
	double* temp;
	int (*k)[3];

	printf ("%d %d %d %d\n", sizeof (p), sizeof (q), sizeof (temp), sizeof (k));  // 4 / 8

	printf ("%d %d %d %d\n", sizeof (*p), sizeof (*q), sizeof (*temp), sizeof (*k)); // 4 1 8 12
	return 0;
}

10.2.4指针偏移:

指针偏移和指针指向的对象类型有关,就以指针指向的对象类型为单位进行偏移。        

指针指向数组里面的数据进行偏移。

地址是常量 , 指针是变量,存储地址编号的。

int a[5] = { 5,78,9,100,34 };

// 定义一个指针,指向数组里面的元素a[0],然后再进行偏移
int* p;

// p指向a[0],保存a[0]的地址
p = a;    // p = &a[0];

printf ("%p %p\n", p, p + 1);  // 

----------------------------------------------------------------
char arr[] = { '2','4','5','6' };

// 定义一个指针,指向数组里面的元素arr[2],然后再进行偏移
char* q;

// q指向arr[2]
q = arr + 2;   // arr + 2  === &arr[2]

printf ("%p %p %p\n", q - 1, q, q + 1);
#include<stdio.h>

int main (void)
{
	int a[5] = { 5,78,9,100,34 };

	// 定义一个指针,指向数组里面的元素a[0],然后再进行偏移
	int* p;

	// p指向a[0],保存a[0]的地址
	p = a;    // p = &a[0];

	printf ("%p %p\n", p, p + 1);      // 偏移 - 4个字节 

	printf ("%p %p\n", &a[0], &a[0] + 1);


	char arr[] = { '2','4','5','6' };

	// 定义一个指针,指向数组里面的元素arr[2],然后再进行偏移
	char* q;

	// q指向arr[2]
	q = arr + 2;   // arr + 2  === &arr[2]

	printf ("%p %p %p\n", q - 1, q, q + 1);  // 偏移-- 1个字节  
	return 0;
}

练习:倒转数组,用指针的方式

#include<stdio.h>
main ()
{
	int a[] = { 10,9,8,7,6,5,4,3,2,1,0, };
	
	//定义指针指向首元素和尾元素
	int* first = a;
	int* last = &a[10];

	//定义中间变量用于交换
	int temp;

	//开始交换
	do
	{
		temp = *first;
		*first = *last;
		*last = temp;
	} while (++first <= --last);
	
	//输出检验
	int i = 0;
	for (i = 0; i < 11; i++)
	{
		printf ("%d ", a[i]);
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值