【发布时间】:2014-09-08 10:49:00
【问题描述】:
给定指向 char 的指针,可以执行以下操作:
char *s = "data";
据我了解,这里声明了一个指针变量,为变量和数据都分配了内存,后者用data\0填充,并且有问题的变量设置为指向它的第一个字节(即变量包含一个可以取消引用的地址)。这是简短而紧凑的。
例如,给定指向 int 的指针,可以这样做:
int *i;
*i = 42;
或者那个:
int i = 42;
foo(&i); // prefix every time to get a pointer
bar(&i);
baz(&i);
或者那个:
int i = 42;
int *p = &i;
这有点重复。使用单个变量时,它很小且可以容忍。但是,它不会产生多个变量的多次使用,从而产生代码混乱。
有没有什么方法可以干脆简洁地写出同样的东西?这些是什么? 是否有任何更广泛的编程方法可以完全避免这个问题?可能我根本不应该使用指针(玩笑)还是什么?
【问题讨论】:
-
在 C 中,函数的参数是按值传递的,而不是按引用(搜索一下),你需要指针来获取后者的行为;并且您需要指针来处理数组(因为在许多情况下它们会衰减为指针)。除此之外,我敢肯定,这是重复的。
-
这不是有指针的主要原因之一吗?我们传递指针变量(内存地址)的值,而不是它们指向的值。我同意,但我不明白这有什么关系。
-
对我来说,您的问题似乎是在问(除了其他问题)指针有什么用处(“也许我根本不应该使用指针(笑话)或其他东西”)…抱歉,如果我误会了你。
-
我对不在 C 中使用指针并不认真。我确实问过是否有任何开箱即用的答案。
-
啊,现在我知道你的问题了。很抱歉造成混乱。