判断输出内容
int main() { char arr[]="nihao" char arr1[]="nibuao" char *p1[]="nihao" char *p2[]="nihao" if(arr1==arr)//不同空间的数组,首地址自然不同,所以不相等 printf("niaho"); else { printf("你不好") } if(p1==p2)//指向常量,不可修改,二者公用一份,都指向同一空间 printf("hh"); else { printf("nomm") } }数组指针的使用
int main() { int arr[10]={1,2,3,4,5,6,7,8,9,10} int (*pa)[10]=&arr; int i=0; for(i=0;i<10;i++) { printf("%d\n",(*pa)[i]))//方法一:输出数组内容,*pa=arr printf("%d\n",*(*pa+i));//方法二:输出数组内容, } }指向函数的指针,将函数名(也就是函数的首地址或称入口地址)赋给一个指针变量,是该指针指向该函数,这个指针变量称为 " 函数指针变量"
在函数中 &函数名 和 函数名 都是函数地址函数指针变量不能进行算数运算函数指针的移动毫无意义,数组指针变量移动,可使其指向后面或前面的数组元素 //定义形式和入口地址的赋予: 类型说明符 (*指针变量名)()=函数名; 例: int(*pa)(int int)=函数名; //调用:(*指针变量名)(实参表); 例:printf("%d\n",(*pa)(2,3)); 例:int(*pa)(2,3)=z;printf("%d\n",z);一维数组传参
void test(int arr[])//传过来的是个数组,接受也为数组,大小不指定也ok {} void test(int arr[10])//传过来是个数组,接受也为数组,指定大小也ok {} void test(int *arr[])//传过来数组,接受为整型指针也ok {} void test2(int *arr[20])//传过来的是个数组,接受也为数组,每个元素为int * {} void test2(int **arr[])//int * 一级指针的地址,传过来放在二级指针中,但切记不能传过来数组ok {} int arr[10]={0}; int *arr2[20]={0}; test(arr); test2(arr2);二维数组传参
二维数组传参,函数形参的设计只能省略第一个【】的数字二维数组首元素地址是第一行地址 void test(int arr[3][5])//可行 {} void test(int arr[][5])//可行 {} void test(int arr[3][])//不可行,可以不知道多少行,但得知道一行多少个元素 {} void test(int *arr)//不可行 {} void test(int **arr)//不可行 {} void test(int *arr[5])//不可行 {} void test(int (*arr)[5])//可行,指针指向5个数组 {} int mian() { int arr[3][5]={0}; test(arr);//二维数组传参 return 0; }一级指针传参
#include <studio.h> void print(int *p,int sz) { int i=0; for(i=0;i<sz;i++) { printf("%d\n",*(p+i)) } } int main() { int arr[10]={1,2,3,4,5,6,7,8,9}; int *p=arr; int sz=sizeof(arr)/sizeof(arr[0]) print(p,sz);//一级指针p,传给函数print return 0; } void print(int *p) {}//当形参是指针时,实参可以传变量取地址,或者存放地址的一级指针 69544· int mian() { int a=10; int *p1=&a; test(&a) test(p1) }二级指针传参
#include <studio.h> void test(int **pt)//当参数为二级指针时 { printf("%d\n",*(p+i)) } int main() { int a=10; int *p1=&a; int **pp=&p1; test(&p1);//一级指针的地址也是二级指针,ok test(pp);//传二级指针参数,ok int* arr[10];//存放一级指针的地址 test(arr);//传指针数组也可以 }花神博客生涯之C语言(指针篇)结束了哦~ 接下来会持续更新(⊙o⊙)!