31天C语言——10,指针高级

1,加减整数

指针加一,对于数组来说是索引加一。
因为是顺序存储的。

int a[]={1,2,3}
a:第一个元素的指针
a+1:第二个
a+2:第三个
*a:第一个元素的指针指向
*(a+1)
*(a+2)

#include <stdio.h>

int main() {
    
    
	int arr[] = {
    
    111, 222, 333};
	printf("%d\n", *arr);
	printf("%d\n", *(arr + 1));
	printf("%d\n", *(arr + 2));
	return 0;
}

效果:

在这里插入图片描述

2,关系运算

对数组来说,后面元素的内存地址是逐渐变大的。
用关系运算可以更方便地遍历。

#include <stdio.h>

int main() {
    
    
	int arr[] = {
    
    111, 222, 333, 444, 555, 666};
	int len = sizeof arr / sizeof arr[0];
	for (int *p = arr; p < arr + len; p++) {
    
    
		printf("%d\n", *p);
	}
	return 0;
}

效果:

在这里插入图片描述

3,指针作差

在数组中,比较两个元素的相对位置。

#include <stdio.h>

int main() {
    
    
	int arr[] = {
    
    111, 222, 333, 444, 555, 666};
	printf("%ld\n", arr - (arr + 3));
	return 0;
}

效果:

在这里插入图片描述有人说,这不是废话么,arr-arr-3就是-3呀。
雀食。。。

那我换一种写法。

#include <stdio.h>

int main() {
    
    
	int arr[] = {
    
    111, 222, 333, 444, 555, 666};
	printf("%ld\n", &arr[0] - &arr[3]);
	return 0;
}

效果还是-3。

在这里插入图片描述
当我有同一数组内,任意两个指针时,由这种方法可以判断相对位置。

4,指针与数组

数组名是首个元素的指针。

#include <stdio.h>

int main() {
    
    
	int arr[] = {
    
    111, 222, 333, 444, 555, 666};
	printf("%d\n", arr[0]);
	printf("%d\n", *arr);
	printf("%d\n", *&arr[0]);
	return 0;
}

效果:

在这里插入图片描述

5,多级指针

指针是类型,有指向地址。
那就有指针,指向指针。
那就。。。
有,更多层的套娃。

二级指针:指向指针的指针。
在这里插入图片描述

#include <stdio.h>

int main() {
    
    
	int a = 3;
	printf("%d\n", a);
	int *b = &a;
	int **c = &b;
	**c = 7;
	printf("%d\n", a);
	return 0;
}

效果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37284843/article/details/124409942
今日推荐