C语言初步学习笔记——第十一节 指针初步(二)

指针运算

1、指针+-整数

2、指针-指针

3、指针的关系运算

1、指针+-整数 与3、指针的关系运算

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i< sz; i++)
	{
		printf("%d ", *p);
		p = p + 1;
	}
	return 0;
}
//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr[9];
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (i = 10; i > 0; i--)
//	{
//		printf("%d ", *p);
//		p = p - 1;
//	}
//	return 0;
//}
//公式化
#define N_VALUES 5
#include <stdio.h>
int main()
{
float values[N_VALUES];
float* vp;
for (vp = &values[0] ; vp < values[N_VALUES];)//包括了指针的关系运算
{
*vp++ = 0;//将数组中的所有元素赋值为0
}
}

注:标准规定——允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较 

2、指针减去指针

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d\n" ,& arr[9] - &arr[0]);
    return 0;
}

输出结果为相减地址之间相隔的位数(下标相减) 

 注:值得注意的是,当一个指针减去一个指针,二者应该指向同一空间(相减的类型不能相同)

小应用

#include<stdio.h>
int my_strlen(char* str)
{
	char* start = str;
	char* end = str;
	while (*end != '\0')
	{
		end++;
	}
	return end - start;
}
int main()
{
	char arr[] = "bit";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;

 二级指针

#include<dtdio.h>
int main()
{
	int a = 10;
	int* pa = &a;
	int** ppa = &pa;
	int*** pppa = &ppa;
	***pppa = 2333;
	printf("%d\n", a);
	printf("%d", ***pppa);
	return 0;
}

指针与数组

除去以下两种情况之外,直接引用数组名,均表示首元素地址

1、&arr-&数组名-数组名不是首元素的地址-数组名表示整个数组-&数组名取出的是整个数组的地址

2、sizeof(arr) - sizeof(数组名)-数组名表示整个数组-sizeof(数组名)计算的是整个数组的大小

数组指针----->指针

指针数组----->数组----->存放指针变量的数组

指针数组

#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	int* arr[3] = { &a,&b,&c };
	for (int i = 0;i < 3; i++)
	{
		printf("%d\n", *(arr[i]));
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值