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'; //可以修改
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'; //可以修改
相关文章推荐
- 1.如何避免野指针2.获取字符串的两种方法。以及malloc,calloc,ralloc的使用注意点3.二维三维数组4.数组和函数的区别
- 7、数组1---(定义、a,&a,&a[0]区别、以指针形式访问和以下标形式访问)(
- C常见问题之字符串的数组形式与指针形式的区别
- C语言字符数组的两种形式与区别
- 指针数组和数组指针的区别
- 指针数组和数组指针的区别
- char数组与char指针的区别与联系
- 转-C语言中使用指针与数组的区别
- 数组指针和指针数组的区别
- 数组与指针的区别
- 数组指针和指针数组的区别(转)
- 发一篇关于 数组名称 和 指针区别 的专题探讨
- 指针与数组的区别,以及指针的空间开辟问题
- 数组名与指针区别
- 数组与指针区别
- C/C++数组名与指针区别
- sizeof和strlen的区别,数组和指针的区别
- 数组名与指针区别--转载
- 指针与数组的区别
- C/C++数组名与指针区别深入探索(转载)