数组与指针内存比较注意
来源:互联网 发布:手机淘宝改好评 编辑:程序博客网 时间:2024/04/28 11:05
数组char *a[]=“hello”;
指针char *p=“hi”;
a是整个char的首地址,是个常量!对a的赋值是错的!只可以对其内容进行改变!
且sizeof(a)=6;
a大小固定为6,不可再改变了!
注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
不论数组 a 的容量是多少,sizeof(a)始终等于 sizeof(char *)。
其实质是void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4 字节而不是 100 字节
}
p是个地址的变量,它可以改变!sizeof(p)=2;
char *q="what";
p=q;
则p地址(=q地址)指向了q地址内容!
不可单独对p[2]......赋值!
..........................完善中............................
指针的赋值注意:不能调用函数参数进行指针的赋值,调用参数都是局部变量,退出便释放了!
void GetMemory(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str, 100); // str 仍然为 NULL
strcpy(str, "hello"); // 运行错误
}
如上str依旧==NULL
若真要用就用函数返回值进行,如下: 但注意,char *GetMemory3(int num)
{
char *p = (char *)malloc(sizeof(char) * num); //
//林锐 博士 在其编的 高质量编程指南中说: char p[]="hello";栈内存不行!返回指针但没有内容!!!!
////不要用栈内存的返回地址,如上例道理一样,因为该内存在函数结束时自动消亡
////
//((((((但我试过是可以的,也就是Tset3中str=“hello”中这里请看过的读者自己试试,愿意交流!)))))))))
//
//又试了下,,,str指向的内存中是已经没有值了!!!用cout ,printf,memcpy能发现没有值了
return p;
}
void Test3(void)
{
char *str = NULL;
str = GetMemory3(100);
strcpy(str, "hello");
cout<< str << endl;
free(str);
}
- 数组与指针内存比较注意
- 数组指针与指针数组的比较
- 指针数组与数组指针比较
- 指针与数组的比较
- 指针与数组的比较
- 指针数组与二级指针比较
- 指针与数组 内存分配
- C++指针数组与数组指针的比较
- C++指针数组与数组指针的比较(二)
- 数组作与指针做参数比较
- 学习比较--数组与指针1
- 数组作与指针做参数比较
- 数组作与指针做参数比较
- 指针与数组名异同比较总结
- 比较指针与数组的特性
- 数组指针与指针数组 及相关的内存偏移
- 指针与内存, 指针数组,常量指针类笔记
- 二维数组:内存布局与指针
- Linux新添加用户
- 批处理:FOR的参数/F与eol、skip
- KMP算法实现
- 某国有银行电子渠道报表系统SSIS ETL优化报告
- asp.net使用Mysql乱码处理
- 数组与指针内存比较注意
- linux下用C编写的OCI连接Oracle数据库程序代码
- POJ 1904 King's Quest
- hibernate 删除
- 批处理:FOR的参数/F之delims详解
- ucenter1.5通讯过程分析
- ATL中编译期间的虚函数调用机制
- oracle学习笔记之二:数据类型之DATETIME 收藏
- Eucalyptus的架构与安装