社区
C++ 语言
帖子详情
数组和指针
cg05568256068
2009-04-22 05:17:46
请教大家一个问题:c语言中指针和数组在编译时的区别 例如:int a[10]和int *b,a[5]和b+5 在编译的时候区别是什么
...全文
105
5
打赏
收藏
数组和指针
请教大家一个问题:c语言中指针和数组在编译时的区别 例如:int a[10]和int *b,a[5]和b+5 在编译的时候区别是什么
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cg05568256068
2009-04-22
打赏
举报
回复
[Quote=引用 4 楼 lingyin55 的回复:]
C专家编程里解释的很好:
经典的错误:在一个文件定义了数组,却在另外一个文件声明其为指针。代码如下:
/*File name: main.c*/
extern int* array; /*声明指针*/
int main(void)
{
array[0]=1; /*用指针访问数据*/
return 0;
}
/*File name: def.c*/
int array[5]={0}; /*定义的却是数组*/
1。编译器对数组名和指针变量的处理方式
编译器在编译时会产生一个符号表,记录了符号名和它的…
[/Quote]
太谢谢了!
lingyin55
2009-04-22
打赏
举报
回复
C专家编程里解释的很好:
经典的错误:在一个文件定义了数组,却在另外一个文件声明其为指针。代码如下:
/*File name: main.c*/
extern int* array; /*声明指针*/
int main(void)
{
array[0]=1; /*用指针访问数据*/
return 0;
}
/*File name: def.c*/
int array[5]={0}; /*定义的却是数组*/
1。编译器对数组名和指针变量的处理方式
编译器在编译时会产生一个符号表,记录了符号名和它的地址。对于指针变量,这显然很好理解。而数组名就不那么明显了,它仅仅是一个符号而已,何来地址?编译器是这样处理的,它记录了array[0]的地址;这和我们通常的理解也是一样的。
2。带下标形式的数组和指针寻址方式
(1)数组情形
char a[9]="abcdefgh";
...
c=a[i];
在编译期,会在符号表中创建这样一条记录:
name:a address:9980
要获取a[i]的值分两个步骤:
step 1:取得i的值并和9980相加
step 2:在内存地址(9980+i)处取其内容
(2)指针情形
char* p="abcdefgh";
...
c=p[i];
在编译期,会在符号表中创建这样一条记录:
name:p address:4624
要获取p[i]的值分三个步骤:
step 1:在内存地址4624处取其内容,比如说“5081”
step 2:取得i的值并和5081相加
step 3:在内存地址(5081+i)取其内容
jame2001
2009-04-22
打赏
举报
回复
你可以用汇编语言來看编译器如何實作...
影子LEON
2009-04-22
打赏
举报
回复
int a[10]和int *b
如果b=a的话
a[5]则是第六个元素
b+5则是第六个元素的地址
*(b+5)则是第六个元素
jackyjkchen
2009-04-22
打赏
举报
回复
int a[10]和int *b
这两个是有区别的,一个预分配了栈内存空间,一个是未初始化的野指针,没有指向任何合法空间。
a[5]和b+5
这两个区别倒不大,数则也可以用后者定位,指针也可以用前者定位,一些老的C语言教材推荐后者,但是实际上编译效率是一样的
指针
进阶之
数组
指针
和
指针
数组
指针
进阶之
数组
指针
和
指针
数组
,超详细,不会来看
指针
数组
和
数组
指针
(非常易懂)
指针
数组
指针
与一维
数组
当定义一个一维
数组
时,系统会在内存中为改
数组
分配一个储存空间,其
数组
的变量名就是
数组
的首地址。若定义一个
指针
变量,并将
数组
的首地址赋值给
指针
变量,则我们说该
指针
指向了这个一维
数组
。 例如: int *p,a[10]; p=a; //
数组
的变量名a就是
数组
的首地址 另一种赋值方式也可写为: int *p,a[10]; p=&a[0]; //a[0]的地址也是
数组
的首地址 ...
指针
数组
和
数组
指针
的区别和用处
“
数组
指针
”和“
指针
数组
”,其本质只要看最后的后缀
数组
指针
:是一个
指针
,指向
数组
的
指针
。
指针
数组
:是一个
数组
,装着
指针
的
数组
。
【C语言】
指针
数组
和
数组
指针
的区别
的情况就更好理解了,在这里“()”的优先级比 “[ ]” 高,“ * ”号和 p2 构成一个
指针
的定义,
指针
变量名为 p2,int 修饰的是
数组
的内容,即
数组
的每个元素。p1 先与 “[]” 结合,构成一个
数组
的定义,
数组
名为 p1,int *修饰的是
数组
的内容,即
数组
的每个元素。
指针
数组
:首先它是一个
数组
,
数组
的元素都是
指针
,
数组
占多少个字节由
数组
本身的大小决定,每一个元素都是一个
指针
,在 32 位系统下任何类型的
指针
永远是占 4 个字节。
指针
数组
可以说成是”
指针
的
数组
”,首先这个变量是一个
数组
。
C语言
数组
之
指针
数组
和
数组
指针
指针
数组
指针
数组
指针
数组
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章