[英]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.