C -操作指针指向的对象



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

静态char newMessage[400];

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

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

char *p = newMessage;

:

char *p = &newMessage;

后者试图用char (*)[400]类型的值初始化char *变量p,这是无效的c。

创建并初始化p之后,您可以随意使用它:

p[6] = 12;

或者类似的

将指针指向数组

char* p = newMessage ;

并从函数返回。

与使用它所指向的数组相同。

newMessage[2] = ''
p[2] = ''

当您声明一个像static char newMessage[400]这样的数组时,标识符newMessage将被替换为数组的第一个元素的地址,并且它的行为类似于指针。

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);

都是有效的表达式。

注意,在最后四个函数调用中,传递的不是数组,而是指向字符串第一个字符的指针。按照惯例,函数会扫描内存,直到找到一个空字节终止符。

实际上应该是char *p = newMessage; . char[]的行为类似于char*。稍后您将按照通常修改任何指针的方式来修改它。顺便说一句,这是非常基础的,所以你最好阅读教程。另外,既然你问了这个问题,如果你打算返回一个指向数组的指针,那么数组最好不要在堆栈上分配。它应该是堆分配的(在您的情况下,它是静态的)

实际上不能操作数组,因为数组在c中不是第一类类型。

几乎任何你想对数组名做的事情都会使它退化为一个指针。例外是sizeof,所以您可以使用sizeof array/sizeof *array获得元素计数。

你能做的是改变数组元素的值。使用指针算术和解引用*。索引运算符a[b]*(a+b)的语法糖。

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

最新更新