【C语言】指针进阶

1.字符指针

const char* pstr = "hello"; //这里的pstr指针变量存的是字符‘h’的地址。

下面是一个例子:

int main()
{
char str1[] = "hello bit.";
char str2[] = "hello bit.";   //这里的str1和str2的地址是不相同的,str1 != str2
const char *str3 = "hello bit."; 
const char *str4 = "hello bit.";  //这里的str3和str4是指向同一个常量字符串,所以str3 == str4
return 0

2.指针数组

int* arr1[10]; //整形指针的数组
char *arr2[4]; //一级字符指针的数组
char **arr3[5];//二级字符指针的数组

3.数组指针

数组指针是指向数组的指针。
例如

int (*p2)[10]; p2是一个指针,指向一个10个元素的整型数组。

并且数组名和&数组名也是不同的

int arr[10];

arr代表首个元素的地址,arr+1跳过到下一个元素地址。
&arr代表整个数组的地址,&arr+1跳过整个数组的地址。

int main()
{
int arr[3][5] = {{1,2,3,4,5}{6,7,8,9,10}};
//此处的arr代表首行数组的地址,即为数组指针。
int (*p)[5] = arr;//这是数组指针写法
return 0;
}

看如下代码含义:

int (*parr2)[10]; //parr2是一个数组指针,指向10个元素的数组每个元素是int型。
**int (*parr3[10])[5]; //数组parr3[10]的每个元素是一个指针,每个指针指向一个int[5]的数组。**

4.数组参数,指针参数

1.一维数组传参

void print(int* p);
void print(int arr[10]);
//这两种都可以传参
int arr[10] = {0};
print(arr);

2.二维数组传参

void print(int arr[2][5]);
void print(int (*arr)[5]);
//这两种也都可以
int arr[2][5] = {0};
print(arr);

3.一级指针传参

void print(int* p)int a = 5;
int* p = &a;
print(p);

4.二级指针传参

void print(char** ppc);

char c = 'b';
char*pc = &c;
char**ppc = &pc;
print(ppc);

5.函数指针

void test()
{
printf("hehe\n");
}
void (*pfun1)() = test;//表示方法

6.函数指针数组

函数指针数组定义

int (*parr1[10])(); //数组parr1[10]每个元素为一个指针,指向int ()函数类型。

7. 指向函数指针数组的指针

void (*p[10])(char*) //函数指针数组定义
void (*(*pp)[5])(char*) //函数指针数组的指针定义
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值