便利的聊城网站建设,欧洲做塑料交易网站,wordpress采集爬虫,赣州招聘网指针 一.什么是字符指针二.使用指针数组模拟二维数组三.函数指针 一.什么是字符指针 字符指针#xff1a;指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间#xff0c;并有唯一确定的首地址。即将字符串的首地址赋值给字符指针#xff0c;可让字符指针… 指针 一.什么是字符指针二.使用指针数组模拟二维数组三.函数指针 一.什么是字符指针 字符指针指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间并有唯一确定的首地址。即将字符串的首地址赋值给字符指针可让字符指针指向一个字符串。 int main()
{char str1[] hello bit.;char str2[] hello bit.;const char* str3 hello bit.;const char* str4 hello bit.;if (str1 str2)printf(str1 and str2 are same\n);elseprintf(str1 and str2 are not same\n);if (str3 str4)printf(str3 and str4 are same\n);elseprintf(str3 and str4 are not same\n);if (str3 str4){printf(Yes\n);}else{printf(No\n);}return 0;
}上述代码中的运行结果 第一个的运行结果为什么是不同的因为str1和str2是两个不同的字符数组开辟的空间也是不同的 第二个的运行结果是相同的因为str3和str4都是字符串常量指向的地址都是相同的 二.使用指针数组模拟二维数组
int main()
{int arr1[] { 1,2,3,4,5 };int arr2[] { 2,3,4,5,6 };int arr3[] { 3,4,5,6,7 };//int* int* int*//指针数组int* a[3] { arr1,arr2,arr3 };for (int i 0; i 3; i){for (int j 0; j sizeof(arr1) / sizeof(arr1[0]); j){printf(%d ,a[i][j]);}printf(\n);}return 0;
}arr[i]就是相当于拿到了每个元素的数组名j相当于拿到了每一列的数组名 三.函数指针
int Add(int x, int y)
{return x y;
}int main()
{//函数名就是函数的地址//函数名也是函数的地址printf(%p\n, Add);printf(%p\n, Add);int(*pf1)(int, int) Add;//int (*pf1)(int, int) Add;//pf1就是函数指针变量//int (* pf2)(int, int) Add;//int ret (* pf2)(2, 3);//int (* pf2)(int, int) Add;//int ret pf2(2, 3);//int ret pf2(2, 3);int ret Add(2, 3);printf(%d\n, ret);return 0;
}1.首先需要一个指针变量*pf1Add 2.因为运算符的优先级所以*pf1需要用括号括起来(*pf1) 3.是什么类型的如果是int就是 int(*pf1),其他类型是一样的 4. 上面函数参数是两个整型 所以第二个括号就是int (*pf1)(int int )两个参数可以省略 5. int ret (* pf2)(2, 3);对函数指针直接进行传参 以上就是函数指针 int main()
{( *(void (*)()) 0 )();return 0;
}上述代码所说的是函数没有参数返回类型是void参数也是空强转为函数指针类型 void (* signal(int,void(*)(int)))(int); 此代码是一次函数声明声明的是signal函数 int是signal函数的第一个参数void (*)(int)是此函数的第二个参数是函数指针类型参数是int返回类型是void