1樓:匿名使用者
陣列作為引數傳遞的時候就已經退化為指標了,即傳遞陣列就是傳遞a的首地址,void f(int * parr, int len)和void f(int parr, int len)是等價的。
引數parr存的是指向a的首地址的指標,因此parr[3] = 88;修改了a[3]。
2樓:空空之光
# include
//在此程式裡只呼叫了一次這個函式,f(a, 6);
//如果這個a是個陣列,即宣告方式為int a[6],a這個符號就代表指向a[0]的指標,
//而a+3代表指向a[3]的指標
//現在把a傳到f(int * parr, int len)的第一個引數裡,正好和引數的型別符合
//當然,下面用parr[3]也是可以的
void f(int * parr, int len)int main(void)
;//靜態初始化陣列,a[3]為4
printf("%d\n",a[3]);
f(a, 6);
printf("%d\n",a[3]);
return 0;}
3樓:
每一步給你加了註釋。。。。
# include
void f(int * parr, int len)int main(void)
;//定義一個陣列,陣列容易是6,一共有6個元素printf("%d\n",a[3]); //輸出陣列中下標為3的元素,陣列下標是從0開始的,下標為3的元素就是4
f(a, 6);//呼叫這個函式,把陣列首地址和長度作為引數,傳遞給函式
printf("%d\n",a[3]);//輸出經過函式f處理過後的陣列中下標為3的元素
return 0;
}f(a, 6);
這裡不用取地址符嗎?。。
陣列的名字就表示陣列的首地址,所以不用加取地址符。。。
如果只是int 型,就需要加取地址符&
希望能幫到你。。。。
4樓:i金你奶奶家
在c語言裡陣列和指標作為實參的時候傳遞的都是其首地址。這裡的陣列作為實參傳遞的時候只需給出陣列名,即a。如果要寫成取地址的格式也可以寫成&a[0]。兩個寫法都一樣。
5樓:匿名使用者
a 就是a的儲存地址,a 與 &a[0] 等價
c語言中,怎麼使用malloc函式為陣列指標分配空間 比如要為char *p[ ]分配空間,應該怎麼弄
6樓:
指標陣列和陣列指標是兩個不同概念,你這裡給出的定義例項實際上是指標陣列的定義。
指標陣列是指所定義陣列的每個陣列元素都是一個相應資料型別的指標,開設空間的操作可以應用迴圈語句進行,例如:對於char *p[10]; 可以應用
for(i=0;i<10;i++)
p[i]=(char *)malloc(sizeof(char)*n); //為每個指標申請開設n字元的儲存空間
開設後,對於p的使用與二維陣列的使用格式類似,可以有效的使用兩個下標,
如 p[0][0]='a';
還可以像每個指標中賦值字串: p[2]="beijing"; 當然字串長度應該小於n。
而陣列指標,是指定義為指向某個固定大小順序空間的指標,定義的格式如下:
char (*pa)[10]; //定義一個指向擁有10元素的字元陣列的指標,
int (*p)[10];
應用格式可以參考下述程式,申請空間、賦值、輸出後,可以觀察到100被賦值到第五行第十個元素,指標可以像二維陣列一樣通過兩個下標引用所申請開設的空間。
#include
main()}
c語言使用指標函式進行陣列互換問題 10
7樓:匿名使用者
你這個只是試圖交換兩個陣列的首地址,而陣列的首地址是常量,不會交換成功的。
你的swap中要用迴圈一次交換兩個陣列的對應元素才能實現你想要的功能。
關於c語言陣列和指標和malloc函式的問題,謝謝!
8樓:迷路的國王
你好,因為在這兒,指標和陣列名並不是一回事,你給一個不為指標的陣列名分配記憶體,屬於語法錯誤,出故障是預料之中。
注:陣列名大部分時候當做指標用,但並不是什麼時候都是指標,一定要注意區分啊!
推薦閱讀《c和指標》這本書。
9樓:007多啦
你這幹嘛來著???為何搞個陣列出來,而且還用malloc的返回值賦值????
malloc的返回值是指標地址,而你arr既不是用來放指標的變數,又不是可以被賦值的左值。
arr在被賦值之前至少要有個下標把,像 arr[2] 。
有了下標了也不行,你在定義arr的時候要這樣:
int * arr[elem]; //這樣的話,arr裡面任何一個成員都可以指向一個int變數的地址了。
所以要改動的有兩個地方,一個是int * arr[elem]; 一個是被malloc函式賦值的arr那個地方。
c語言問題,陣列與指標,C語言陣列和指標的問題
char a computer a指向一個常量字串,常量字串是不能修改的,而你的for迴圈內要修改a指向的這個常量字串,自然要出錯 char a computer 這個a就是個普通陣列了,它的內容是可以改動的,就不會出錯了 因為 a是個指標啊 所以應該賦值賦地址!所以 應該 char a compu...
C語言陣列(指標)越界訪問,C語言指標越界問題,大神指教!!!
與編譯器無關,只與記憶體管理機制有關,是作業系統級別的問題,堆疊的讀取方式只是資料結構上的不同,在機器層面,依然是單純的記憶體讀寫操作 陣列越界訪問的危險性不好評估,但確實是最嚴重的危險之一 結果基本上會100 崩潰,但是崩潰的原因很可能不一樣,就算是同一段越界 跑幾遍,原因也可能是不一樣的 指標越...
c語言指標陣列不需要分配記憶體,C語言 指標陣列不需要分配記憶體?
天雲一號 指標陣列是需要分配記憶體單元的。指標陣列表示一個指標型別的陣列,陣列中每個元素都是一個指標,而c語言中指標只佔4個位元組,所以指標陣列所佔的記憶體大小為4 n n為陣列的大小 舉例如下 int a 5 定義一個int型別的指標陣列,共5個元素,每個元素都是一個int型別的指標,共佔用4 5...