读书人

指针 数组 退化有关问题

发布时间: 2013-03-27 11:22:42 作者: rapoo

指针 数组 退化问题
数组退化成指针以后,好像是没办法在回到数组了。

不过我就考虑字符串行不行的。

有一个比较特殊的字符串。
"a\0b\0d\0"

这个字符串我想让他回到字符串的数组去。
就是
"a\0"
"b\0"
"c\0"

不拷贝内存行不,我在考虑。
c和c++在这个问题上又有何区别
[解决办法]

引用:
引用:感觉这个叫字符数组而不叫字符串吧。为什么不想用memcpy做呢。

可以叫啊,因为可以这样搞啊
char a[2][2] = {"a\0", "b\0"};

memcpy不用哈~因为在讨论退化能不能逆向的问题。我记得不能,不知道有没有技巧可以搞定

这个是字符串数组吧、、
char s2[]={'a','\0','b','\0','c','\0'};

我以为您的需求是这样的。
[解决办法]
从某种意义上来说,数组和指针没什么实质的区别。

[解决办法]
引用:
引用:电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字……
赵老师。我不是那个意思。。。

我想把访问 字符串的 数组 或者 字符(串) 的数组 工作搞简单一点。

我意思是这样的。

"abc\0","bcde\0" -> 这样的2个连续字符串,传到某个函数里面以后,想简化成

*(a[2])
a[0] -> 直接访问abc\0
a[1] -> 直接访问bcde\0

或者

"abc","bcde" -> 这样的2个连续字符数组,传到某个函数里面以后,想简化成

*(a[2])
a[0] -> 直接访问abc
a[1] -> 直接访问bcde

// "abc\0","bcde\0" -> 这样的2个连续字符串,传到某个函数里面以后,想简化成
//
// *(a[2])
// a[0] -> 直接访问abc\0
// a[1] -> 直接访问bcde\0
//
// 或者
//
// "abc","bcde" -> 这样的2个连续字符数组,传到某个函数里面以后,想简化成
//
// *(a[2])
// a[0] -> 直接访问abc
// a[1] -> 直接访问bcde
#include <stdio.h>
#include <string.h>
char s1[]="abc\0bcde";
char *s2[2]={"abc","bcde"};
void func1(void *p) {
char *a[2];

a[0]=(char *)p;
a[1]=(char *)p+strlen((char *)p)+1;

printf("func1\n");
printf("a[0]==[%s],a[1]==[%s]\n",a[0],a[1]);
}
void func2(void *p) {
char *a[2];

a[0]=((char **)p)[0];
a[1]=((char **)p)[1];

printf("func2\n");
printf("a[0]==[%s],a[1]==[%s]\n",a[0],a[1]);
}
int main() {
func1(s1);
func2(s2);
return 0;
}
//func1
//a[0]==[abc],a[1]==[bcde]
//func2
//a[0]==[abc],a[1]==[bcde]

读书人网 >C++

热点推荐