指针的进阶一

目录

1.字符指针

2.数组指针

3.指针数组

4.数组传参

5.函数指针


1.字符指针

复制代码
int main()
{
const char* pstr = "hello world.";
printf("%s\n", pstr);
return 0;
}

pstr中存放的就是字符串的首元素地址,并不是把字符串hello world 放到字符指针pstr中了。

2.指针数组

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

cpp 复制代码
1 int* arr1[10]; 
2 char *arr2[4]; 
3 char **arr3[5];

第一行代码表示整形指针的数组

第二行代码表示一级字符指针的数组

第三行代码表示二级字符指针的数组

3.数组指针

cpp 复制代码
int (*p)[10]

p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指

向一个数组,叫数组指针。

注意: 的优先级要高于*号的,所以必须加上()来保证p先和*结合。

4.数组传参

cpp 复制代码
#include <stdio.h>

int main()
{
    int arr[10] = { 0 };
    printf("arr = %p\n", arr);
    printf("&arr= %p\n", &arr);
    printf("arr+1 = %p\n", arr+1);
    printf("&arr+1= %p\n", &arr+1);
    return 0;
}

根据上面的代码我们发现,其实&arr和arr,虽然值是一样的,但是意义应该不一样的。

实际上: &arr 表示的是数组的地址,而不是数组首元素的地址。(细细体会一下)

本例中 &arr 的类型是: int(*)10 ,是一种数组指针类型

数组的地址+1,跳过整个数组的大小,所以 &arr+1 相对于 &arr 的差值是40.

5.函数指针

cpp 复制代码
void test()
{
printf("hehe\n");
}
//下面pfun1和pfun2哪个有能力存放test函数的地址?
void (*pfun1)();
void *pfun2();

首先,能给存储地址,就要求pfun1或者pfun2是指针,那哪个是指针? 答案是:

pfun1可以存放。pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。

相关推荐
梓䈑2 小时前
【算法题攻略】BFS 解决FloodFill 算法、最短路问题、多源BFS 和 拓扑排序
c++·算法·宽度优先
程序喵大人6 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
碎光拾影9 小时前
i.MX6ULL时钟系统配置指南
c语言·arm开发·嵌入式硬件
GeekArch10 小时前
第28讲:避坑——AI堆栈分配错误、栈溢出BUG
c语言·人工智能·stm32·mcu·学习·bug
野生风长10 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++
Escalating_xu12 小时前
C++可变参数模板与引用折叠精讲
开发语言·c++
wuyk55512 小时前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
云泽80812 小时前
Visual Studio 2026 新手保姆级教程:环境搭建、界面优化与编译器配置详解
开发语言·c++·c·开发工具·visual studio
fqbqrr13 小时前
2607d,C++细节比不上d
c++·d
^yi13 小时前
【C++】继承的那些事儿~
c++·继承·菱形继承·隐藏·final·继承原理·多继承的指针偏移