C语言初级阶段7——指针2——特殊指针

指针函数:是一个函数,返回值类型是一个指针。

#include<stdio.h>
int* fun()
{
	//a是一个局部变量
	int a = 10;
	return &a;
}
int main() {
	int* p = fun();
	printf("%d\n", *p);//能输出一次的原因是编译器做了一次优化。
	printf("%d\n", *p);//a是局部变量,执行完就被释放了。
	return 0;
}

函数指针:是一个指针,指针的指向是一个函数。

定义格式:函数的返回值类型(*函数指针名)(函数的形参列表)

#include<stdio.h>
//函数名就是这个函数的首地址
void fun1(int a,int b)
{
	printf("%d\n", a + b);
}
void(*pFun)(int a, int b);
int main() {
	pFun = fun1;
	pFun(1, 2);
	fun1(3, 4);
	return 0;
}
#include<stdio.h>
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
//这一部分是我写的,但是需要别人提供计算功能。
void fun3(int (*pF)(int, int), int x,int y)//int (*pF)(int,int)=add;也可以
{
	printf("%d\n", pF(x, y));
}
int main() {
	fun3(add,10,10);
	fun3(sub, 10, 10);
	return 0;
}
#include<stdio.h>
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
typedef int(*pF)(int, int);//函数指针取别名,别名就是它自己。
//并且别名可以当作类型去使用。
#define aa 123
//这一部分是我写的,但是需要别人提供计算功能。
void fun3(pF pf, int x,int y)//int (*pF)(int,int)=add;也可以
{
	printf("%d\n", pf(x, y));
}
int main() {
	fun3(add,10,10);
	fun3(sub, 10, 10);
	return 0;
}

常量指针:定义不用初始化,能改变指向,指向的内容不能被修改。

const int *p

指针常量:定义的时候,必须初始化,不能改变指向,可以改变指向的内容。这个常量的值是一个指针。

int *const p1:

#include<stdio.h>
void fun4(const int* a)
{

}
int main()
{
	int a = 10;
	int b = 20;
	int* const p3 = &a;
	printf("%d\n", *p3);
	return 0;
}

大端存储和小端存储

1.大端存储:高位存于高位中(适合人的存储方式)

数据的地址:0x12345678

0x0-0x3这四个字节当中

0x0 12

0x1 34

0x2 56

0x3 78

2.小端存储:低位存于低位中(电脑默认的存储为小端存储)

数据的地址:0x12345678

0x0-0x3这四个字节当中

0x0 78

0x1 56

0x2 34

0x3 12

posted on 2022-11-07 15:04  George-Juddson  阅读(41)  评论(0编辑  收藏  举报