C语言字符数组和指针的关系?
#include<iostream>usingnamespacestd;voidreverse(char*s){char*p,*q,temp;p=s;q=s+strlen...
#include <iostream> using namespace std; void reverse(char* s) { char *p,*q,temp; p = s; q = s + strlen(s) - 1; while(p<q) { temp = *p; *p = *q; p++; q--; } } int main() { char name[] = "abcdef"; //为什么换成 char* name = "abcdef";就错误? reverse(name); cout<<name<<endl; return 0; }
展开
1个回答
展开全部
这是编译程序处理数组和指针的方式不同导致:
1、对于数组,虽然数组名称也是类似指针一样是存储的数组的起始地址,但编译程序在处理数组初始化时,内部会自动生成一个偏移量指针,然后将初始化数据使用偏移量指针,根据初始化数据的数据类型所在字节数移动,存储在内存中。
2、对于单纯定义的指针,系统仅仅认为就是存储的内存地址,不会再做额外的工作,甚至在定义时,连内存区域都没分配,所以指针是NULL,如果指针要存储字符串,那么需要你自己手动写程序,可以使用链表的方式,如果只有头指针,那么需要为字符串人为做结束标志,否则,可以定义一个尾指针指向字符串的最后一个字符。
1、对于数组,虽然数组名称也是类似指针一样是存储的数组的起始地址,但编译程序在处理数组初始化时,内部会自动生成一个偏移量指针,然后将初始化数据使用偏移量指针,根据初始化数据的数据类型所在字节数移动,存储在内存中。
2、对于单纯定义的指针,系统仅仅认为就是存储的内存地址,不会再做额外的工作,甚至在定义时,连内存区域都没分配,所以指针是NULL,如果指针要存储字符串,那么需要你自己手动写程序,可以使用链表的方式,如果只有头指针,那么需要为字符串人为做结束标志,否则,可以定义一个尾指针指向字符串的最后一个字符。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询