C中的指针如何工作? [重复]

问题描述 投票:-1回答:1
C中有一个程序:

void bar(char *str) { str = "ok bye!"; } int main(int argc, char *argv[]) { char *str = "hello world!"; bar(str); printf("%s\n", str); return EXIT_SUCCESS; }

但是,它说主方法中的str值不受bar方法影响,但是为什么呢?我的理解是char *str = "hello world!";此代码使指针str指向字符串“ hello world”。然后,bar(str);使str指针指向字符串“ ok bye!”。但是为什么结果仍然是“ hello world”?

void bar(char **str_ptr) { *str_ptr = "ok bye!"; }

解决方案是将bar方法的参数更改为双指针,为什么要这样做?
c pointers
1个回答
0
投票
str函数中的bar指针仅是局部变量。您不能以此来更改主代码中的str变量。这个概念称为“按值致电”。但是由于您实际上是想更改其指向的内存,因此可以对其进行更改。请注意,不要覆盖分配的内存长度。

#include <stdio.h> #include <stdlib.h> #include <string.h> void bar(char *str, size_t s) { strncpy(str, "ok bye!", s); str[s-1] = '\0'; // terminate for the case that the string was cropped } int main(int argc, char *argv[]) { char str[20] = "hello world!"; printf("%s\n", str); bar(str, sizeof(str)); printf("%s\n", str); return EXIT_SUCCESS; }

© www.soinside.com 2019 - 2024. All rights reserved.