哪一本書是你讀?這似乎很奇怪,你的書會不會教你這樣的事情...
指針的想法是,他們允許功能,如scanf
分配給它們指向的對象(因此而得名,指針趨向到指向的東西)。但是,像其他變量一樣,您需要將它們初始化爲!
假設你有一個函數add_one
這更增加了它的參數:
void add_one(int x) {
x++;
}
該功能是沒用的,因爲它使以x
的變化是不可見的來電,由於被稱爲通概念按值其中副本傳遞進來的價值,最終被修改(所以原始保持不變)。
您需要製作x
指針才能使該更改在add_one
以外可見,並且scanf
需要進行相同的更改。
void add_one(int *x) {
(*x)++; // equivalent to x[0]++;
}
當然,這是不行的,如果x
實際上並不指向的東西!在你的例子中,你有沒有初始化的指針變量;他們指着......什麼都沒有?什麼?誰在乎? 讓他們指向某個地方!
你可以這樣做:
一個變量使用&
地址運算符。例如:
int x;
int *pointer_to_x = &x;
聲明的陣列,以及使用該陣列的標識,可能與+
加法運算符結合在陣列中的一個元素到另一個點。例如:
int array[42];
int *pointer_to_first = array + 0;
int *pointer_to_second = array + 1;
調用malloc
,realloc
,calloc
或指針返回到合適尺寸的物體的一些其它功能。例如:
int *pointer_to_whatever = malloc(sizeof *pointer_to_whatever);
// Remember to free(pointer_to_whatever) ONCE when you're done with it
您還沒有分配的任何內存 –
我將如何正確地分配內存?我試過這個。 char * s = malloc(20 * sizeof(char)); char * t = malloc(20 * sizeof(char)); –
請閱讀c書或教程。 – kaylum