您的位置:首页 > 其它

指针数组和数组指针

2018-03-08 23:11 246 查看
c语言中数组和指针经常性的混合使用,但是很多时候有些逻辑看似正确,但是实际上却大相径庭!
博主从简单的例子对比一些数组指针指针数组的区别,但是具体的深层次博主并未详细讲解!#include <stdio.h>
int main()
{
char array_1[] = "abcde"; // 字符数组
printf("%c\n", *array_1); // 输出字符 =====> 字符是具体对应字符元素
printf("%s\n", array_1); // 输出字符串=====> 字符串从数组元素首地址开始到'\0'

char *array_2 = "ABCDE" ; // 指针数组
printf("%c\n", *array_2); // 输出字符 =====> 字符是具体对应字符元素
printf("%s\n", array_2); // 输出字符串=====> 字符串从指针数组首地址开始到'\0'

/*
一般字符数组 与 字符指针数组 基本操作类似

字符数组: array_1存放的是是数组首元素地址,也就是a的地址; array_1存放char类型组合的字符串,a本身是字符,故array_1是char *类型
指针数组: array_2存放的是字符串首元素地址,也就是A的地址; array_2存放char类型组合的字符串,A本身是字符,array_2本身是char *类型
*/

// 此下以array_1和指针说明:?
char *p = array_1 ; // char * 指针p指向array_1数组,不是指向array_1

char ** q = &p ; // ok ; q是指向指针p的指针,p是指向数组的指针;p本质是指针,所以q可以指向p
//char ** q = &array_1 ; // ERROR ; array_1是数组名,虽然也是char *类型,但是本质是数组变量
char (*a)[6] =&array_1; // (*a)是一个指针有6个元素,每个元素为char型。也就是a指向的对象是有6个char元素的数组,即a是指向一维数组的指针。

printf("%c\n", *(*a));
printf("%c\n", *(*q));
printf("%s\n", *a);
printf("%s\n", *q);
return 0;
}在VC++6.0的输出结果是:
------------------------------------------------------------------
a
abcde
A
ABCDE
a
a
abcde

abcde
————————————————————————————
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息