linux c基础------数组与指针

数组

用指针访问数组

用指针遍历数组,效率更高。

for(p=a;p<&a[MAX]'p++)
{
	x=*p;
	/*do something*/
}
不可以用sizeof获得数组大小
while(*strings)
{
	puts(*strings++);
}
void f(char a[12])
{
	++a;
}

指针

理解指针时,最好将其分为 指针类型指针所指向的类型 两个概念来理解

int (*ptr) [3]     指针类型: int(*)[3]     指针所指类型:int()[3] 
int *(*ptr)[4]     指针类型: int*(*)[4]    指针所指类型:int*()[4] 

指针本身占据4个字节的长度(32位)

指针的运算

常量指针 和 指针常量

(1)const char* p;   //char const * p;

常量指针,const char 是常量,这是一个指向常量的指针,指针本身可以修改,但内容不能修改,即*p='b'非法,而 p=&q合法。可用于strlen 和 strcpy。

(2)char* const p=a;

指针常量,const p 是常量,指针的内容可以修改,但指针本身不能修改,即p=&q非法,而 *p='b'合法

(3)char* p="abc";

定义了一个指针变量,指向字符串abc 的首地址,但“abc”是一个常量字符串,被存在静态存储区的常量存储区,而p是一个指针,存在栈中,所以*p='b'编译时可以通过,但运行时会出现错误。

指针数组 和 数组指针、

(1)char *p[n];

指针数组,包含了n个指针变量p[0],p[1],p[2]…

(2)char (*p)[n];

数组指针,定义了一个指向n个数据元素的二维数组指针。

p = &(p[0])       p是二维指针
p[0] = &(p[0][0]) p[0]是一维指针

p[0] + 1表示在列上移动。  e.g:  p[0] + 1 = &p[0][0] + 1 = &p[0][1]
p + 1   表示在行上移动。  e.g: p + 1 = &(p[0]) + 1 = &p[1]

https://blog.csdn.net/Helloo_jerry/article/details/80340936

函数指针 和 指针函数

(1)数据类型 (*fun) (参数列表);
    	void (*fun)(int*,int*);

函数指针,变量有地址,函数同样也有地址
第一步:定义函数指针,int (*pfun)(int*,int*);
第二步:定义函数,int fun(int*,int*);
第三步:把函数地址赋给函数指针,pfun=fun;
第四步:通过函数指针去调用这个函数“(*pfun)(p,q)”,pfun是函数地址,*pfun是函数本身

(2)数据类型 *fun (参数列表)
	char *fun(int*,int*)

指针函数,尽量用全局变量的指针,因为局部变量会释放掉。

空指针NULL

常用于判断

泛指针void

当进行纯粹的内存操作时,或者传递一个未定类型的指针时,可以使用void指针,void指针也经常用作函数指针。

字符串函数

https://blog.csdn.net/Leeds1993/article/details/60956971

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值