C语言——指针

  • 变量变量,能变,就是能读能写,必定在内存里

  • 指针指针,保存的是地址,32位处理器中地址都是32位的,无论是什么类型的指针变量,都是4字节

下述几段代码都是一些常用的标准实例

int main()
{
	int a = 1;
	char b = 'a';
	
	int* p1 = &a;
	char* p2 = &b;
	
	*p1 = 20;
	*p2 = 'b';

	printf("%d", sizeof(a));
	printf("%d", sizeof(b));
	
	printf("%d", sizeof(p1));
	printf("%d", sizeof(p2));
	
	printf("%d", sizeof(*p1));
	printf("%d", sizeof(*p2));
	
	return 0;
}
int main()
{
	int a = 0x11223344;
    //一个int是4个字节 
    //一个字节byte是2个十六进制 
    //1个十六进制是4二进制
    //一个int是32位二进制
    
    //比如说一个8位单片机操作引脚 例如P1SEL |=0x11; 
    //这是操作了两个十六进制 也就是一个8位2进制呀 
    //所以32位单片机把int拉满了 也就是int a=0x12 34 56 78;
    //就是8位十六进制 也就是4*8=32位二进制
	printf("%x\n", a);
	char* p1 = &a;
	int* p = &a;
	
	*p = 0x33224488;
	printf("%x\n",a);
	printf("%p\n",a);
	printf("%p\n",p);
	printf("%p\n",p1);
	return 0;

}
int main()
{	
	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		/*
		*p = i;
		p = p + 1;
		*/
		*(p + i) = i;//为什么他是p+i 因为p的地址 一直在最前面
		//等价于a[0] = 0; ->a[1] = 1
	}

	printf("%d",arr[5]);
	return 0;

}
void FindMax(int* max, int* count, int* array, int Length)
{
	int i = 0;
	*count = 1;
	*max = array[0];
	for (i = 0 ; i < Length ;i++)
	{
		if (array[i] > *max)
		{
			*max = array[i];
			*count = 1;
		}
		else if (array[i] == *max)
			(*count)++;
	}
}

int main()
{
	int arr[] = {2,4,7,12,5,66,66,66};
	int max = 0;
	int count=0;

	printf("%d %d %d\n", max,count,arr[2]);
	FindMax(&max, &count, arr, 8);
	printf("%d %d %d", max, count, arr[2]);
	
	//max = arrMax(arr, 5);
	//printf("%d",max);
	/*printf("%d\n", arr[0]);
	test(arr);
	printf("%d", arr[0]);*/
	return 0;
}
int Time[] = {1,6,7};

int* GetTime(void)
{
	//int Time[] = { 1,6,7 }; 会销毁
	return Time;
}

unsigned char AirData[20];

void SendData(const unsigned char *Data,unsigned char count)
{
	unsigned char i;
	for (i = 0; i<count; i++)
	{
		AirData[i] = Data[i];
	}
}

int main()
{
	unsigned char i;
	unsigned char send[] = {0x11,0x32,0x85,0x87};
	SendData(send,4);

	for (i = 0; i < 4; i++)
		printf("sned[%d]=%x    ",i,AirData[i]);
	//int* p;
	//int* p1;
	//int a = 4;
	//p = GetTime();
	//p1 = &a;
	//printf("%d",p[2]);
	//printf("%d",*p1);
	return 0;

}

需要注意的是指针都是固定字节的,解引字节才是不同的关键

64bit位操作系统8字节 一字节byte是8位bit 2^64 32bit位操作系统4字节 2^32 bit byte kb mb GB bit->byte /8 byte->kb /1024``后面都是1024 以32位操作系统为例子

2^32 bit = 4294967296 bit /8 = 536870912 byte /1024 = 524288 kb /1024 = 512MB /1024 = 0.5GB 1个十六进制占1个字节 0x11 -> 0001 0001 一个二进制就是一位 8位 就是一个十六进制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7yewh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值