C语言—指针应用解析

一.指针介绍

  1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。
#include<stdio.h>
#include<stdlib.h>
//
//一级指针的定义
int main()
{
	int a = 10;
	int* p = &a;
	printf("%d\n", *p);//指针p存放着a的地址,通过解应用找到p所指向空间的值
	system("pause");
	return 0;
}
  1. 指针的大小是固定的4/8个字节(32位平台/64位平台)。
  2. 指针是有类型,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限。
    即:int类型指针加1或者减1会跳过4个字节
    char
    类型的指针加1或者减1跳过1个字节
  3. 指针的运算
    (1)指针±指针:
//指针+-整数
int main()
{
	int arr[4] = { 1, 2, 3, 4 };
	int* p = arr;//arr表示首元素地址
	p++;
	printf("%d\n", *p);//2
	system("pause");
	return 0;
}

(2)指针-指针

int my_strlen(char* p)
{
	char* s = p;
	while (*s != '\0')
		s++;
	return s - p;
}
int main()
{
	char str[]= "asdf";
	int len = my_strlen(str);
	printf("%d\n", len);//  4
	system("pause");
	return 0;
}

二.指针分类
(1)一级指针。
例如:int* q =&a;
(2)二级指针。
例如:int** p = &q;
(3)指针数组:指针数组是一个存放指针的数组
例如:int* arr1[10]; //整形指针的数组
char *arr2[4]; //一级字符指针的数组
char **arr3[5];//二级字符指针的数组
(4)数组指针:它是一个存放数组的指针。
例如:int *p1[10];//指针数组
int (*p2)[10];//数组指针
(5)函数指针:
例如:void (*pfun1)()//函数指针
void *p1fun2 ()//不是函数指针
(6)函数指针数组:
例如:int (*parr1[10]])()
(7)指向函数指针数组的指针:
它是一个存放函数指针数组的指针。

void test(const char* str)
{
	printf("%s\n", str);
}
int main() 
{  
	//函数指针pfun  void (*pfun)(const char*) = test; 
	//函数指针的数组pfunArr 比特科技
	void(*pfunArr[5])(const char* str); 
	pfunArr[0] = test;
	//指向函数指针数组pfunArr的指针ppfunArr
	void (*(*ppfunArr)[10])(const char*) = &pfunArr;  return 0; 
}

三.数组传参和指针传参
1.数组传参:
总结:二维数组传参,函数形参的设计只能省略第一个[]的数字。 因为对一个二维数组,可以不知道有多少行,但是必须知道一行多少元素。 这样才方便运算。
数组传参可传数组也可传地址。
传地址用指针接收,或者传数组用数组接收。
2.指针传参:传地址用指针接收。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值