指针(进)

指针

指针的进阶

  • 字符指针
  • 数组指针
  • 指针数组
  • 数组传参和指针传参
  • 函数指针
  • 函数指针数组
  • 指向函数指针数组的指针
  • 回调函数
  • 指针和数组试题解析

在初级阶段的指针当中,我们知道了指针的概念

  • 指针就是个变量,用来存放地址,地址唯一标识一块内存空间
  • 指针的大小是固定的4/8个字节(32位平台或者64位平台)
  • 指针是有类型的,指针的类型决定了指针+整数的步长,指针解引用操作时候的权限
  • 指针的运算(指针±整数,指针-指针,指针的比较运算)
字符指针
#include<stdio.h>
int main()
{
	char a = 'w';
	char* pc = &a;   //这个时候,pc称为字符指针,pc的类型为char*
	char arr[10] = "abc";
	char* pa = arr;   //arr作为数组名,他代表的是数组首元素的地址,pa的类型为char*
	char* p = "abcdef";  //此时p只具有4个字节,但是abcdef不算\0有6个字节,显然放不下
	//那么此时,p中存的就是"abcdef"中首个字母a的地址,地址用指针接收,刚好为4个字节
	//上述常量表达式的结果就是首字符a的地址。
}

题目:

#include<stdio.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcdef";
	if (arr1 == arr2)
		printf("arr1==arr2\n");
	else
		printf("arr1!=arr2\n");
	return 0;
	//打印结果为arr1!=arr2
	//原因:因为arr1和arr2会开辟两块空间的大小,虽然都表示的是首字母a的地址
	//但是两块空间的地址是不一样的,所以两块空间中a的地址自然也就是不一样的了。
}

在这里插入图片描述

#include<stdio.h>
int main()
{
	char* p1 = "abcdef";
	char* p2 = "abcdef";
	if (p1 == p2)
		printf("p1==p2");
	else
		printf("p1!=p2");
	return 0;
	//打印结果为p1==p2
	//虽然把字符串abcdef地址存在了p1和p2当中,但是两个字符串是一样的
	//都是abcdef,所以首元素a的地址自然也是一样的了
	//abcdef为常量字符串,所以说他是不能被改变的,其实也只会出现一次abcdef
	//但是p1的地址和p2的地址是绝对不一样的。
}

在这里插入图片描述

发布了36 篇原创文章 · 获赞 48 · 访问量 5538

猜你喜欢

转载自blog.csdn.net/weixin_43831728/article/details/104100189