C语言容易晕的问题

C语言三座大山:数组、指针、函数。

单个概念并不复杂,但是概念互相套在一起就容易迷糊。基于此,整理如下:

1 数组:一批内存位置相邻的变量。

指针与数组:

因为指针可以用来做运算,所以通常可以用指针来指向数组。

int a[3] = {1,2,3};
int *p = a;

如上:p是变量, a是数组常量, 数组名本身就是个指针,但a是常量。

2 指针数组与数组指针:

指针数组:见名知意,是一个数组,其每个元素是指针。

例:int *p[4] 其中p是个长度为4的数组,每个元素类型是整型指针。

数组指针:本质是个指针,指向一个数组。

例:int (*p)[4] 其中变量p是一个指针,指向长度为4的元素为整型变量的数组。

3 指针函数与函数指针

指针函数:本质是个函数,返回值是个指针类型

int * func(int i, int j) 

{
    return &i;
}

函数指针:本质上是个指针,指针类型是函数

int max(int a, int b)
{
    return a > b ? a : b;
}
int (*p)(int, int);
p = max; 

4 指针常量与常量指针

指针常量:本质是个常量,常量类型是个指针 谁离变量近,变量类型就是谁

int a;
int *const p = &a; 
p不可以变 *p可以变

常量指针:本质是个指针,指向内容是个常量

int a; 
int const *p = &a;
(*p)不能变,指针指向的内容(p)可以变

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值