簡體   English   中英

C中字符串數組的增加值

[英]Increasing Value of Array of Strings in C

我有一個分配,其中我將字符串傳遞給定義為char *get_word( char **string_ptr);

當傳遞的字符串指向'\\0'字符時,我的主程序將停止調用該函數。 因此,我必須在函數內部實現這一行: *string_ptr += strlen( *string_ptr );

這讓我很困惑。 我的印象是*string_ptr將是在函數中傳遞的字符串。 那么,增加價值將意味着什么呢?

另一個問題。 如果**string_ptr是一個字符串數組,那么*string_ptr或僅是string_ptr本身是什么?

首先, **string_ptr語義上不能保證string_ptr將是字符串數組或char指針數組。 處理內存管理后,這一點很明顯。

據我所知,您正在向函數傳遞指向字符串的指針。 所以你要做這樣的事情

char* string = "my string in read-only memory";

foo(&string);

要訪問指針指向的字符串的值,請先取消引用指針,然后再取消引用字符串。 解析為字符串的第一個字符。

**string_ptr是字符串的第一個字符。

*string_ptr是字符串

string_ptr是指向字符串的指針。


有更清晰或至少更易理解的方式來實現您想要的目標:

char* p = *string_ptr;

for(char* p = *string_ptr; *p != '\0' p++);

您創建指向字符串的新指針

然后增加它,直到它指向持有\\0的地址


向變量添加更多*只是意味着它指向另一件事。

char* ch; // ch points to char or string
char** ch; // ch points to char*
char*** ch; // ch points to char**

等等


* string_ptr將是在函數中傳遞的字符串。 那么,增加價值將意味着什么呢?

您對此是正確的。 指針值的增加通常意味着對變量執行指針算術。 從本質上講,它與增加正則變量相同,但是這次是對地址值執行的,其中增加1意味着增加1 * sizeof(type)

我演示了什么是增量指針及其作用。


*string_ptr += strlen( *string_ptr );

因為*string_ptr是字符串偏移量,這會使您的字符串指向其末尾。 因此,如果您在此之前獲得更多參考,那將是很好的。

我有一個分配,我用[原型] char *get_word( char **string_ptr);將字符串傳遞給函數char *get_word( char **string_ptr);

當傳遞的字符串指向“ / 0”字符時,我的主程序將停止調用該函數。

重要的是要區分一個字符串 (它是一個以null終止的char 數組)和一個指向字符串(字符串的第一個字符)的指針指針是如何將字符串傳送到函數並從函數返回,以及通常如何使用字符串一般都可以訪問。 指向字符串第一個字符的char *與字符串本身是獨立的並且獨立。 因此,您的陳述僅在解釋為“當傳遞了地址的指針變量的值指向字符串的'/ 0'時,我的main會停止調用該函數”時才有意義。

因此,我必須在函數內部實現這一行: *string_ptr += strlen( *string_ptr ) ;

實際上,這將更新string_ptr指向的地址處的指針值,以使其指向其最初指向的字符串的終止符。 但是,我傾向於這不是您真正想要的,因為那樣就不需要多次調用該函數。 如果函數無條件執行該語句,則傳遞的指針將僅在一次調用后始終指向終止符。

這讓我很困惑。 我的印象是*string_ptr將是在函數中傳遞的字符串。 那么,增加價值將意味着什么呢?

*string_ptrstring_ptr指向的內容。 使用您提供的聲明,它將是char *類型的指針。 請記住:區分此類指針和它所指向的東西(在這種情況下為字符串的第一個字符)非常重要。 增加指針的值只會使其指向字符串中的后面某個字符(只要您不增加太多)。 如果將其增加字符串中所有字符的數量,則它將指向終止符。

另一個問題。 如果**string_ptr是一個字符串數組,那么*string_ptr或僅是string_ptr本身是什么?

*string_ptr**string_ptr被視為表達式,在上下文中是沒有意義的。 您提供的聲明,但是,表達*string_ptr計算結果為char *通過指向string_ptr 表達**string_ptr計算結果為char由指向char *通過指向string_ptr string_ptr本身就是函數參數的值,該參數被聲明為指向char指針的指針。

但是我認為您實際上是在詢問函數原型,在這種情況下,您提出了錯誤的問題。 通常的問題是關於參數string_ptr的類型( char **string_ptr表示字符串數組。 答案在幾個層面上是“否”,在至少一個層面上是“也許”。

表面上,類型char **表示指向char **的指針。 可能是一個指向第一個char *在數組char * ,那就是,如果你提出這樣的一個數組的相應參數會是什么。 絕對不能確定所指向的char *是數組的成員,如果是,則不會傳遞有關該數組長度的任何信息。 有這樣一個指針指向一個單一的,標量之間沒有有意義的區別char *和其指向的一構件陣列的第一和唯一的元素char *

當然,同一區別適用於下一級。 一個有效的char * 通常指向一個字符串的第一個char ,但是您不能單憑類型知道它。 假設這樣的指針是有效的,它可能指向一個未終止的char數組,或者指向單個標量char 特別是對於char *類型,它也可能指向任何其他類型的對象的值的原始字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM