为什么const char*
指向的值由char数组更新,该数组应该只保存应存储在ROM中的原始字符串文字的副本。
我从此链接const char * const versus const char *?
了解const char*
,char* const
,const char* const
的基本理论
#include <stdio.h>
#include <stdlib.h>
int main(){
char a[] = "ABCD";
char z[] = "WXYZ";
const char* b = a;
a[1] = 'N'; // WHY THIS WORKS AND UPDATES THE VALUE IN B.... a should make its own copy of ABCD and update
// it to NBCD... b should still point to a read only memory ABCD which can't be changed4
//b[1] = 'N'; // THIS FAILS AS DESIRED
printf("%s\n", b); // Output -> ANCD
return 0;
}
答案 0 :(得分:4)
class DenseTransformer(TransformerMixin):
def transform(self, X, y=None, **fit_params):
return X.todense()
def fit_transform(self, X, y=None, **fit_params):
self.fit(X, y, **fit_params)
return self.transform(X)
def fit(self, X, y=None, **fit_params):
return self
classifier = Pipeline([
('vectorizer', CountVectorizer ()),
('TFIDF', TfidfTransformer ()),
('to_dense', DenseTransformer()),
('clf', OneVsRestClassifier (GaussianNB()))])
classifier.fit(X_train,Y)
predicted = classifier.predict(X_test)
const char* b = a;
这意味着您无法修改指针指向const
的内容,而不是b
。通过a
修改内容仍然合法。
答案 1 :(得分:1)
您需要了解的是什么是简单的指针。当你写
echo
它表示变量b指向变量a的相同内存位置。因此,无论你在一个意志中做出什么改变都会反映在b所指出的记忆中。
答案 2 :(得分:0)
您使b
成为指向const的指针,因此您无法使用b
修改b[...]
指向的值。但是,您没有使a
成为常量指针,您可以修改a[]
内容。
变量b
保留您分配的内容。并且您指定了指向a
数组的第一项的指针。现在b
指向存储a[0]
的同一内存位置。修改a
数组内容后,您会看到b
点位于同一位置,现在包含已修改的数据。
答案 3 :(得分:0)
C仅禁止修改使用const说明符定义的对象。您的对象a
未使用该说明符定义,因此可以对其进行修改。
虽然无法通过b
对其进行修改,但可以通过其他方式对其进行修改。(例如a
)。