这可能是一个非常简单的问题,但我似乎无法在网上找到明确的答案。假设有一个指向声明为:
的数组的指针static char newMessage [400]; char * p =& newMessage;
(我不知道这是否正确)如何仅使用指针来操作newMessage数组。我这样做是因为C不能返回数组但可以返回指向数组的指针。请温柔,我是新的
答案 0 :(得分:4)
您的代码几乎正确;唯一的问题是你有不匹配的指针类型。你想要:
char *p = newMessage;
不
char *p = &newMessage;
后者尝试初始化p
,char *
变量,其值为char (*)[400]
,这是无效的C.
创建并初始化p
后,您可以随意使用它:
p[6] = 12;
或类似的东西。
答案 1 :(得分:2)
只需将指针指向数组
即可char* p = newMessage ;
从函数返回。
您使用它与使用它指向的数组相同。
newMessage[2] = '\0'
p[2] = '\0'
答案 2 :(得分:2)
当您声明类似static char newMessage[400]
的数组时,标识符newMessage
将被数组的第一个元素的地址替换,并且它的行为类似于指针。< / p>
char* p= newMessage;
char* q= "Hi, world";
newMessage[4]= 'x';
p[4]= 'x';
*(newMessage + 2)= 0;
*(p+2)= 0;
strlen(newMessage);
strlen(q);
strcmp(newMessage, "Hi world");
strcmp(p, q);
都是有效的表达。
请注意,在最后四个函数调用中,您不是传递数组,而是指向字符串第一个字符的指针。按照惯例,函数会扫描内存,直到找到空字节终止符。
答案 3 :(得分:1)
实际上,它应该是char *p = newMessage;
。char[]
的行为类似于char*
。
稍后您将通过修改任何指针的方式对其进行修改。
顺便说一下,这是非常基础的,所以你阅读教程会更好。
此外,既然你问过这个问题,如果你计划返回一个指向数组的指针,最好不要在堆栈上分配数组。它应该是堆分配的(在你的情况下它是静态的)
答案 4 :(得分:1)
您实际上无法操纵数组,因为数组在c中不是第一类类型。
您对数组名称几乎所做的任何事情都会使它退化为指针。例外是sizeof
,因此您可以使用sizeof array/sizeof *array
获取元素数。
您可以做的是更改数组元素的值。使用指针算术和解除引用*
。索引运算符a[b]
是*(a+b)
的语法糖。
此外,您可以使用库函数(或您自己的)接受指针。