C基础-初始指针
  rb2XW0fjLLT8 2023年11月02日 61 0

何为指针?

可以通过指针找到以其为地址的内存单元。指针就是变量,只不过存放在指针的值被当做地址处理

指针和指针类型

根据下图我们可知不同指针类型的存储大小是一样的,并根据计算机位数决定的,64位一般是8个字节

int main()
{
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(double*));

	return 0;
}

C基础-初始指针_赋值


指针类型的意义

1.决定访问内存大小

int a = 0x11223344;
int* pa = &a;
*pa = 0;

根据下图可知当&a以int* 类型解引用的时候该指针所指的值改变了4个字节

C基础-初始指针_数组_02

C基础-初始指针_数组_03

int a = 0x11223344;
char* pc = &a;
*pc = 0;

根据下图可知当&a以char*类型解引用的时候该指针所指的值改变了一个字节

C基础-初始指针_野指针_04

C基础-初始指针_赋值_05

故我们得到指针类型的作用在于在解引用的时候访问内存的大小

2.决定偏移量

根据下图,我们得到,当int*指针时,指针加1向后偏移4个字节;当char*时,指针加1向后偏移1个字节,因此指针类型还觉得指针+1所偏移的量

int a = 0x11223344;
	int* pa = &a;
	char* pc = &a;

	printf("%p\n", pa);
	printf("%p\n", pa + 1);

	printf("%p\n", pc);
	printf("%p\n", pc + 1);

C基础-初始指针_数组_06

野指针

1.指针未初始化

int* p;
*p = 20;
printf("%d\n", *p);

2.指针越界访问

当循环访问超过数组范围,使指针指向值不明确

int main()
{
	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;

	for (i = 0; i < 12; i++)
	{
		p++;
	}
}

3.指针指向了空间释放

int* test()
	{
		int a = 10;
		return &a;
	}
int main()
	{
		int* p = test();
		*p = 20;
	}

指针的运算

1.指针+-整数

	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;

	for (i = 0; i < sz; i+=2)	//每隔2打印数组的值
	{
		printf("%d ", *p);
		p += 2;
	}

	int arr[5] = { 0 };
	int* vp = arr;
	for (vp = &arr[0]; vp < &arr[5];)	对arr数组每个元素赋值1
	{
		printf("%d ", *vp++ = 1);
	}

2.指针+-指针

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//算的是两个地址之间的元素个数
printf("%d ", &arr[9] - &arr[0]);
//输出为9

int my_strlen(char arr[]) //利用指针相减计算字符串长度
{
  char* str = &arr[0];
  char*end = &arr[0];
  
  while(*end != '\0')
  {
    end++;
  }
  return end - star;
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  xfEU0RRJpeyr   2023年11月02日   52   0   0 初始化linux数组
  xfEU0RRJpeyr   2023年11月02日   72   0   0 初始化数组赋值
  b1UHV4WKBb2S   2023年11月13日   27   0   0 阴影模糊数组
  nQkVcpdWfLDr   2023年11月13日   40   0   0 数组sort函数python
  M9aMEIE19lAW   2023年11月13日   31   0   0 php数组
rb2XW0fjLLT8