簡體   English   中英

將指針傳遞給c中的char數組

[英]passing a pointer to a char array in c

我寫了一個小測試程序,看看如何將指向char數組的指針傳遞給函數。 這是我的代碼:

#include <stdio.h>
#include <string.h>

int scopy(char *org ){
    printf("the value of org is %s" , org);
    printf("\n");
}

int main(void)
{
    char original[11];
    strcpy(original , "helloworld");

    scopy(original);

    printf("the value of original now is %s" , original);

    return 0;
}

我對指針的了解告訴我,org是一個指針,它傳遞了原始[0]的內存地址,當我執行這個程序時,我發現了一些困擾我的事情,並讓我懷疑我對指針學到的事實。 。

當我打印org時,我得到了完整的單詞。 但根據邏輯,如果指針不是這應該打印出內存地址;

當我嘗試打印出[1],out [2]時,鍵盤告訴我該過程異常結束

我在這個問題中的基本疑問是org正在做什么,我理解它是一個指向內存地址的char指針(哪個??)。 任何幫助,將不勝感激 。 我是c編程的新手。

當我嘗試一下while循環時

while(out[i] !='\0')
printf("%s",out[i]);

它不會在'\\ 0'處終止。 strcpy文檔聲明'\\ 0'被復制到char數組。

org是一個指向char的指針,它是你在scopy中傳遞的(指向數組第一個元素的指針)。 當你在printf中使用說明符%s ,你將一個指向char的指針視為一個字符串; 如果要將其值作為指針打印,則應使用%p 例如: printf("The memory address in org is %p\\n", org);

從你的說法我覺得你認為%s會將數字轉換為字符串。 它不會這樣做,它期望指向字符串的第一個字符。

請記住,數組的名稱等同於&array[0] ,即當您在函數中傳遞數組的名稱時,您將傳遞指向第一個元素的指針。 所以在這里,當你調用scopy(original)它與寫scopy(&original[0]) ,並且因為original[0]char而且&是指向它的指針,這就是你的函數需要char *的原因。

是的,當你打電話給scopy(original);時,你是對的scopy(original); ,scopy傳遞一個指向original數組中1.元素的指針。

scopy(original); scopy(&original[0]);完全相同scopy(&original[0]);

但是,您將%s與printf一起使用。 %s期望匹配參數是char指針,poiting到一系列字符,並且該序列的結尾是0字節。 這就是C所謂的字符串。

這意味着你不能做例如printf("%s",org[i]); 因為org [i]是一個char,所以它不是指向以0字節結尾的數組的char指針。

您可以通過執行prinf["%c", org[0]) `while(out [i]!='\\ 0')來打印單個字符

或者對於你的while循環:

while(out[i] !='\0')
  printf("%c",out[i]);

你也可以嘗試:

while(out[i] !='\0')
  printf("%s",&out[i]);

暫無
暫無

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

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