操纵指针指向的内容

时间:2014-03-28 23:31:06

标签: c arrays function pointers

这可能是一个非常简单的问题,但我似乎无法在网上找到明确的答案。假设有一个指向声明为:

的数组的指针

static char newMessage [400];     char * p =& newMessage;

(我不知道这是否正确)如何仅使用指针来操作newMessage数组。我这样做是因为C不能返回数组但可以返回指向数组的指针。请温柔,我是新的

5 个答案:

答案 0 :(得分:4)

您的代码几乎正确;唯一的问题是你有不匹配的指针类型。你想要:

char *p = newMessage;

char *p = &newMessage;

后者尝试初始化pchar *变量,其值为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)的语法糖。

此外,您可以使用库函数(或您自己的)接受指针。