您的位置:首页 > 其它

C指针与数组两种形式的区别

2012-03-18 12:15 190 查看
一、数组引用

char a[] = "Hello";

char c = a[i]; //以下 c均代表 char 类型

编译器符号表 hold 住一个地址 a ; 运行时:

1、取出i的值,将其与 a 相加;

2、取地址 a+i 的内容;

二、指针引用

char * p ;

……

c = *p;

编译器符号表 hold 着 p 的地址1,运行时:

1、取出 p(地址1)的内容,这是指向一个字符的地址2;

2、取出地址2所指向的字符内容;

三、定义为指针,以数组方式引用

char * p = "Hello";

c = p[i];

编译器符号表中存放p 的地址1,运行时:

1、取出 p(地址1) 中存放的地址2;

2、取出 i 的值;

3、取地址2+i 中存放的内容;

四、定义为指针,声明为数组;定义为数组,声明为指针;

文件A:

char a[] = "Hello";

文件B:

extern char * a;

c = a[i];//报错或有意外结果(可以运行的奇怪的写法是 c=a+i

文件A:

char *a = "Hello";

文件B:

extern char a [] ;

c = a[i] ; //报错或有意外结果

声明与定义应该匹配

五、指针与数组两种类型字符串区别

char * p = “abcde";

*p = 'A' ;//错误,因为初始化指针所创建的字符串常量是只读的!

char *p ;

p = "abcde";

*p = 'A'; //编译通不过

char a[] = "abcde";

a[0] = 'A'; //可以修改

*a='A'; //可以修改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: