对于各种指针的理解

一、从以下几个方面进行剖析
1.字符指针
2.指针数组
3.数组指针
4.数组传参和指针传参

字符指针:char*
一般使用`

int mian()
{
	char ch='w';
	char *pc=&ch;
	*pc='w';
	system("pause");
	return 0;
}

另一种使用方法

int mian()
{
	char* p="hello word";
	printf("%s",p);
	system("pause");
	return 0;
}

这里并不是把字符串hello word存入p中,而是把字符串的首元素地址存放到p中。

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

int* arr1[10];//整型指针的数组
char* arr2[10];//一级字符指针数组
char** arr3[10];//二级字符指针数组

数组指针:
数组指针不是数组是指针。
int(*p)[10]; 这里p先和星号结合,说明p是一个指针变量,然后指向的是一个大小为10的整形数组。所以p是一个指针,指向一个数组,因此叫数组指针。
数组指针的使用:
既然数组指针指向的是数组,那数字指针中存放的应该是数组的地址。
一个数组指针的使用:

void print_arr1(int arr[3][5],int row,int col)
{
	int i=0;
	int j=0;
	for(i;i<row;i++)
	{
		for(j;j<col;j++)
		{
			printf("%d",arr[i][j]);
		}
		putchar('\n');
	}
}
void print_arr2(int (*arr)[5],int row,int col)
{
	int i=0;
	int j=0;
	for(i;i<row;i++)
	{
		for(j;j<col;j++)
		{
			printf("%d",arr[i][j]);
		}
		putchar('\n');
	}
}
int main()
{
	int arr[3][5]={1,2,3,4,5,6,7,8,9,10};
	print_arr1(arr,3,5);
	/*数组名arr,表示首元素地址
	但是二维数组首元素地址是二维数组的第一行
	因此这里传递的arr相当于第一行的地址,是一维数组的地址
	可以数字指针来接收*/
	print_arr2(arr,3,5);
	system("pause");
	return 0;
}```

数组传参和指针传参
一维数组传参

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
void test(int arr[])
{}
void test2(int arr[10])
{}
void test3(int *arr)
{}
void test4(int *arr[20])
{}
int main()
{
	int arr[10]={0};
	int *arr2[10]={0};
	test(arr);
	test4(arr2);
	system("pause");
	return 0;
}

二维数组传参

void test(int arr[3][5])
{}
void test(int arr[][5])
{}
void test(int *arr)
{}
void test(int *arr[5])
{}
void test(int (*arr)[5])
{}
void test(int **arr)
{}
int main()
{
	int arr[3][5]={0};
	test(arr);
	system("pause");
	return 0;
}

一级指针传参

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
void print(int *p,int sz)
{
	int i=0;
	for(i;i<sz;i++)
	{
		printf("%d\n",*(p+i));
	}
}
int main()
{
	int arr[10]={1,2,3,4,5,6,7,8,9,10};
	int *p=arr;
	int sz=sizeof(arr)/sizeof(arr[0]);
	print(arr,sz);
	system("pause");
	return 0;
}

二级指针传参

void test(int **p)
{
	printf("num=%d\n",**p);
}
int main()
{
	int n=10;
	int *p=&n;
	int **pc=&p;
	test(pc);
	test(&p);
	system("pause");
	return 0;
}

今天的总结就到这里了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值