定义了char a[],能否把指针赋给它? 如char a[];char *b;...b = (char *) malloc(100);a = b;如果不行,如何转化? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 例:char a[1],此时a相当于是一个const char*,是不能再赋值的。 char* a;char* b;b = (char *)malloc(100);a = b; // OKchar a[];a = (char *)malloc(100); //Error!char* b;b = (char *)malloc(100); // OKa = (char *)0x100000; //Errorb = (char *)0x100000; //OK理由:char a[];说明a是数组,数组的第一个元素的地址是静态分配的,不能再赋值char *b;说明b是指针,指针可以在运行时被赋值,来指向不同的内存地址 让我们来看一下编译器是如何处理数组的:7: int a[10];8: a[0]=1;00401028 mov dword ptr [ebp-28h],1编译器直接把a[0]变成地址,也就是说不存在一个变量保存数组的首地址。编译器已经分配好了地址,所以就不能改变了。 续楼上兄弟的,当年我写过8086的汇编编译程序,对于这两种指针,我的汇编是这么写的a: db ' 'b: dw 0....2848:0200 202848:0200 20...;这上面就是a的一个实现,a指向2848:02002848:020a 002848:020a 00;b指针占据2848:020a,但是b的值为0,可以让b指向a,汇编的方法就是mov [b],amov [020a],0200//b = ( char * )a;以上是个人意见。 是这样的有一个结构struct msgbuf{ long mtype; char mtext[];}int msgsnd(int msgid,struct msgbuf *buf,...);我自己定义了struct mymsg{ long mtype; char *pbuf;}buf;msgsnd(msgid,(struct msgbuf *)buf,....);是可以的 不行错误 声明字符串是系统会首先为期分配空间,即a[i],i不能为空,切是定值 与此同时a相当于一指向一定给字符数组织指针常量 你可以将a的值付给b,但不可将b的值付给a 你想做什么用,是不是想在程序运行时确定char 的大小。#include<iostream.h>void main(){ int iArray; char *a; cout<<"please inupt number a"<<endl; cin>>iArray; if((a=new char[iArray])==NULL) { cout<<"can't malloc more memory"<<endl; exit(1); }……//加入你要给a 的植即可。} 打开设备失败...... 如何关闭使用密码保护的屏保 再问回调函数!!! 高分求用Win API写的SMTP封装类呢? 请教一个菜单问题22 问几个极极极菜的问题~回答是或不是就行了(有解释更好) 找到工作了,散分,做VC,还希望大家以后多帮我 显示位图文件?? CList的简单问题!马上给分! 关于ADO连接sql server数据库失败的问题 调试问题,在线等待......... WideCharToMultiByte,怎么把UNICODE转换成ASCII
char* b;b = (char *)malloc(100);a = b; // OK
char a[];
a = (char *)malloc(100); //Error!char* b;
b = (char *)malloc(100); // OKa = (char *)0x100000; //Error
b = (char *)0x100000; //OK理由:
char a[];说明a是数组,数组的第一个元素的地址是静态分配的,不能再赋值
char *b;说明b是指针,指针可以在运行时被赋值,来指向不同的内存地址
7: int a[10];
8: a[0]=1;
00401028 mov dword ptr [ebp-28h],1编译器直接把a[0]变成地址,也就是说不存在一个变量保存数组的首地址。编译器已经分配好了地址,所以就不能改变了。
a: db ' '
b: dw 0
....
2848:0200 20
2848:0200 20
...
;这上面就是a的一个实现,a指向2848:0200
2848:020a 00
2848:020a 00
;b指针占据2848:020a,但是b的值为0,可以让b指向a,汇编的方法就是
mov [b],a
mov [020a],0200
//b = ( char * )a;
以上是个人意见。
struct msgbuf{
long mtype;
char mtext[];
}
int msgsnd(int msgid,struct msgbuf *buf,...);
我自己定义了
struct mymsg{
long mtype;
char *pbuf;
}buf;
msgsnd(msgid,(struct msgbuf *)buf,....);
是可以的
与此同时a相当于一指向一定给字符数组织指针常量
你可以将a的值付给b,但不可将b的值付给a
程序运行时确定char 的大小。
#include<iostream.h>
void main()
{
int iArray;
char *a;
cout<<"please inupt number a"<<endl;
cin>>iArray;
if((a=new char[iArray])==NULL)
{
cout<<"can't malloc more memory"<<endl;
exit(1);
}
……//加入你要给a 的植即可。}