C语言(三)数组与指针

目录

指针应用

void指针的意义

关于数组名

strcpy和memcpy的区别


指针应用

  • 函数参数传递(更快,更节约内存空间)

  1. int (4Bytes)             int * (4Bytes)

  2. MyClass (255550Bytes)    Myclass * (4Bytes)

  • 跨函数的值修改(地址传递)

  • 数组(常量指针)

  • 数据结构

  • 最多2级指针

  • void*   万能指针   配合mempy()完成任意类型交换

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void swap(void* lhs, void* rhs, size_t sz) 
{
	void *temp = malloc(sizeof(sz));
	memcpy(temp, rhs, sizeof(sz));
	memcpy(rhs, lhs, sizeof(sz));
	memcpy(lhs, temp, sizeof(sz));
	free(temp);
}
int main()
{
	/*指针应用:
	1.函数参数传递(更快,更节约内存空间)
			int (4Bytes)             int * (4Bytes)
			MyClass (255550Bytes)    Myclass * (4Bytes)
	2.跨函数的值修改(地址传递)
	3.数组(常量指针)
	4.数据结构
	5.最多2级指针
	6.void*   万能指针   配合mempy()完成任意类型交换*/

	int num = 12, other = 40;
	float fNum = 1.570, fOther = 5.068;
	double dNum = 32.750, dOther = 69.054;
	swap(&num, &other, sizeof(int));
	swap(&fNum, &fOther, sizeof(float));
	swap(&dNum, &dOther, sizeof(double));

	printf("%-15d %-15d\n", num, other);
	printf("%-15f %-15f\n", fNum, fOther);
	printf("%-15lf %-15lf\n", dNum, dOther);

	/*strcpy和memcpy主要有以下3方面的区别。
	1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
	2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
	3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy*/

}

void指针的意义

      C语言规定只有相同类型的指针才可以相互赋值

      void*指针作为左值用于“接收”任意类型的指针

      void*指针作为右值赋值给其它指针时需要强制类型转换

      int *p1 = NULL;

      char *p2 = (char *)malloc(sizoeof(char)*20);

关于数组名

  • 数组首元素的地址和数组地址是两个不同的概念
  • 数组名代表数组首元素的地址,它是个常量。
  1. 解释如下:变量本质是内存空间的别名,一定义数组,就分配内存,内存就固定了。所以数组名起名以后就不能被修改了。
  • 数组首元素的地址和数组的地址值相等
  • 怎么样得到整个一维数组的地址?
C语言规定:
int a[10];
printf("得到整个数组的地址a: %d \n", &a);
printf("数组的首元素的地址a: %d \n", a);

strcpy和memcpy的区别

  • 复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

  • 复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

  • 用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值