✨个人主页: 熬夜学编程的小林
系列专栏: 【C语言详解】 【数据结构详解】
指针
1、字符指针变量
2、数组指针变量
2.1、数组指针变量是什么?
2.2、数组指针变量怎么初始化
3、⼆维数组传参的本质
4、函数指针变量
4.1、函数指针变量的创建
4.2、函数指针变量的使用
4.3、typedef关键字
5、函数指针数组
总结
int main()
{
char ch = 'w';
char *pc = &ch;
*pc = 'w';
return 0;
}
int main()
{
const char* pstr = "hello bit.";//这里是把⼀个字符串放到pstr指针变量里了吗?
printf("%s\n", pstr);
return 0;
}
#include
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");
else
printf("str1 and str2 are not same\n");
if(str3 ==str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}
这里str3和str4指向的是⼀个同⼀个常量字符串。 C/C++会把常量字符串存储到单独的⼀个内存区域, 当几个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。 但是 用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。 所以str1和str2不同,str3和str4相同。
• 整形指针变量: int * pint; 存放的是整形变量的地址,能够指向整形数据的指针。• 浮点型指针变量: float * pf; 存放浮点型变量的地址,能够指向浮点型数据的指针。
int *p1[10];
int (*p2)[10];
int (*p)[10];
int arr[10] = {0};
&arr;//得到的就是数组的地址
int(*p)[10] = &arr;
int (*p) [10] = &arr;
| | |
| | |
| | p指向数组的元素个数
| p是数组指针变量名
p指向的数组的元素类型
#include
void test(int a[3][5], int r, int c)
{
int i = 0;
int j = 0;
for(i=0; i
#include
void test(int (*p)[5], int r, int c)
{
int i = 0;
int j = 0;
for(i=0; i
#include
void test()
{
printf("hehe\n");
}
int main()
{
printf("test: %p\n", test);
printf("&test: %p\n", &test);
return 0;
}
test: 005913CA
&test: 005913CA
void test()
{
printf("hehe\n");
}
void (*pf1)() = &test;
void (*pf2)()= test;
int Add(int x, int y)
{
return x+y;
}
int(*pf3)(int, int) = Add;
int(*pf3)(int x, int y) = &Add;//x和y写上或者省略都是可以的
int (*pf3) (int x, int y)
| | ------------
| | |
| | pf3指向函数的参数类型和个数的交代
| 函数指针变量名
pf3指向函数的返回类型
int (*) (int x, int y) //pf3函数指针变量的类型
#include
int Add(int x, int y)
{
return x+y;
}
int main()
{
int(*pf3)(int, int) = Add;
printf("%d\n", (*pf3)(2, 3));
printf("%d\n", pf3(3, 5));
return 0;
}
typedef unsigned int uint;
//将unsigned int 重命名为uint
typedef int* ptr_t;
typedef int(*parr_t)[5]; //新的类型名必须在*的右边
typedef void(*pf_t)(int);//新的类型名必须在*的右边
int *arr[10];
//数组的每个元素是int*
int (*parr1[3])();//函数指针数组
int *parr2[3]();//指针数组
int (*)() parr3[3];
本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!