指针

指针:
1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。
2. 指针的大小固定的4/8个字节(32位平台/64位平台)。大小与类型无关!!!
3. 指针是有类型的,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限。

字符指针

多种定义方式:

int main()
 {   
  char ch = 'w';    
  char *pc = &ch;  //字符指针存放了字符变量的地址  
  *pc = 'w';    
  char* pstr = "hello bit.";//这里其实是把一个字符串中 首地址 放到pstr指针变量里
  return 0; 
 }

指针数组

指针数组是一个存放指针的数组

int* arr1[10]; //定义了一个整形指针的数组 
char *arr2[4]; //定义一级字符指针的数组 
char **arr3[5];//二级字符指针的数组

数组指针

整形指针: int * pint;能够指向整形数据的指针。
浮点型指针: float * pf;能够指向浮点型数 据的指针。
那数组指针应该是:能够指向数组的指针

int *p1[10]; //指针数组,本质是数组,存放的是int*指针
int (*p2)[10]; //数组指针.本质是指针,它指向的是一个大小为10个整型的数组

&数组名VS数组名的区别

#include <stdio.h> 
int main() 
{   
 	int arr[10] = {0};   
	printf("%p\n", arr);  
  	printf("%p\n", &arr);  // &arr 表示的是数组的地址,而不是数组首元素的地址。
  	printf("arr+1 = %p\n", arr+1);
  	printf("&arr+1= %p\n", &arr+1)
  	return 0; 
 }

由下图的结果可以看到,&arr+1之后,地址实际增加了40,它是整个int数组的大小。所以&arr表示的是数组的地址。
在这里插入图片描述

练习题目

#include <stdio.h> 
#include <stdlib.h>
int main()
{
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));//这是一个特殊,它输出的是整个数组的长度4*4=16,而不是数组的首地址的长度4
	printf("%d\n", sizeof(a + 0));//因为有了+0,所以这里已经是把a当做了数组的首地址,那么不论它加上多少,都是指向一个int类型的元素,所以是4个字节的长度
	printf("%d\n", sizeof(*a));//对数组首地址解引用后,是第一个元素1,长度是int的长度4
	printf("%d\n", sizeof(a + 1));//同sizeof(a + 0)
	printf("%d\n", sizeof(a[1]));//同sizeof(a + 0)
	printf("%d\n", sizeof(&a));//数组指针,指针是4字节的
	printf("%d\n", sizeof(*&a));//指针解引用,是数组,16字节
	printf("%d\n", sizeof(&a + 1));//指针+1,和指针依然是同类型的
	printf("%d\n", sizeof(&a[0]));//第一个元素取地址,是一个指针
	printf("%d\n", sizeof(&a[0] + 1));//第一个元素取地址再+1,和指针同样的长度
	system("pause");
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值