內容在此代碼:更改指針的變量
#include <iostream>
int main()
{
const char* name = "Abc";
std::cout<<*name<<std::endl;
return 0;
}
我怎樣才能改變指針變量的內容,不到它是什麼指着?
而且,爲什麼我只是得到A
作爲這個程序的輸出?
謝謝。
內容在此代碼:更改指針的變量
#include <iostream>
int main()
{
const char* name = "Abc";
std::cout<<*name<<std::endl;
return 0;
}
我怎樣才能改變指針變量的內容,不到它是什麼指着?
而且,爲什麼我只是得到A
作爲這個程序的輸出?
謝謝。
您得到一個char
,因爲您正在取消引用char*
指針。
你可以做更改的內容:
*a = 'B'; // your char* would contain "Bbc"
a[0] = 'B'; // your char* would contain "Bbc"
a[1] = 'B'; // your char* would contain "ABc"
a[2] = 'B'; // your char* would contain "AbB"
但是,在改變字符串的內容文字有不確定行爲Ç。所以你不應該那樣做。相反,您需要動態填充char*
。像這樣的東西:
char *a;
a = malloc(sizeof(char)*100); // a string with a maximum of 99 chars
strcpy(a, "Abc");
// now you can safely change char* contents:
a[0] = '1';
a[1] = '1';
a[2] = '1';
printf("%s", a); // will print 111
字符串操作是不是在語言,如Ç那麼容易。由於您正在使用的語法,您似乎正在使用編譯器編譯代碼,因此您可能會嘗試使用string
類,而不是使用指向char
的指針來處理您的字符串。
您訪問*Name
這是指第一個內存位置具有 我fyou想B打印*(Name+1)
和等。
如果你想改變的內容,然後將值賦給*名稱或*(姓名+ 1)或任何你想要的地方。
您不應該嘗試改變const char *變量的內容。按定義它是不變的。如果你想要一個可變字符串,可以使用std :: string,或者分配一個char * buffer []。
改變name
地址值,你可以切換到另一個字符串字面的地址:
const char* newname = "def";
name = newname;
這樣的名字仍然是一個指針爲const char。
您需要了解關於指針的const。
const char *表示指向您不能修改的數據的指針,但您可以移動指針。
const char * name = "Abc";
name = "Def"; // allowed
name[1]='B'; // compiler error
如果你願意,你不能移動指針,然後使用
const char * const name = "Abc"; // cannot move to point at something else
char data[] = "ghi";
char * const name = &data[0];
name[1] = 'H'; // permitted
name = &data[1]; // not allowed as name is a constant pointer
你的輸出是因爲*的名字是一個字符,一個你的指針指向,因此字符串中的第一個。
被警告:改變字符串文字是未定義的行爲 - 它們是一個非常好的理由 – Flexo 2011-01-28 11:27:06