指针的理解(2)

指针的理解(2),第1张

指针的理解(2)

一维数组的传参: 当传入的数组名看成是一个数组时,可以直接用一个数组去接收,数组的大小可以不写; 当传入的数组看成是元素的首地址的时候,那么便可以用一个指针去接收 int* p (*代表是一个指针的符号,p是传入的地址)

指针数组(int* arr[])一个存放指针的数组,存放的也就是一些地址,前面的类型是地址变量指向的类型: 传参 同样如果传入的数组被看做数组名可以直接用一个指针数组去接受(int* arr[])大小可以不写(但最好写)如果是元素的首地址,那么便需要用一个二级指针去接收,因为传入的地址是指针的地址(int**arr)

二维数组的传参:跟一维数组一样,接收的时候可以用二维数组接收,接收时最好定义一下大小,二维数组当成首地址传入时,传入的就是一个一维数组的首地址,那么便要用一个数组指针去接收

(int (*p)[n]) 先定义一个指针,该指针指向的是一维数组的每个元素,每个元素是int型的

一级指针可以接收的: 变量的地址,一位数组的数组名

二级指针可以接收的: 一级指针的地址,二维数组的数组名,二级指针

函数指针:指向函数的指针,跟定义数组指针一样先定义一个指针然后再看他后面指向的内容,每个内容的类型是什么

#define _CRT_SECURE_NO_WARNINGS
#include




 一维数组传参的接收方式
int arr[10] = {0};
test(arr);
传入数组
void test(int arr[])
void test(int arr[10]) 传入的是一个数组,那么我便用一个数组去接受(里面有无大小是另外的关系)
void test(int* arr)//  传入的是首元素的地址,该元素的类型为int 所以用一个int的指针接收它

int* arr2[10] = { 0 }; //指针数组 ,每个数组元素存放的是一个指针
test(arr2)
传入数组
void test(int* arr[10])
void test(int* arr[])
void test(int* *arr) // 传入首元素的地址,首元素的类型为指针,所以用一个指针接收它
  传入什么就用什么去接收,可以不考虑大小,如果传入的看做是首元素的大小那么就用一个指针去接收它 定义一个指针就是加个*


void test(int* p, int x) {

	for (int i = 0; i < x; i++) {
	
		printf("%d", *(p + i)); // 将地址解引用打印出来
	
	}

}
int main(){

	int arr[10] = { 1,2,3,4,5,3,1,63 };
	 // 可以定义一个指针传入,也可以直接将数组名传入,数组名为首元素的地址
	int sz = sizeof(arr) / sizeof(arr[0]);

	test(arr, sz);


}


	二维数组传参
int arr[3][5]={0};
test(arr);
传入参数
void test(int arr[3][5]) 传入一个二维数组,那么我变用一个二维数组去接收(大小可以不用写)
void test(int* arr) 错误 如果看做地址 我
void add(int x,int y){

return x+y;
}
int main(){

int a=0;
int b=0;
int (*P)(int,int)=add;
(p)(2,3) //利用指针函数调用函数时 有*无*都是一样的


}
 
 

int (*p)(int x,int y)=arr; 这里不存在首地址 &arr和arr 一样的

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5703322.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-18
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存