當前位置:首頁 » 編程語言 » c語言數組取地址

c語言數組取地址

發布時間: 2022-06-16 21:44:30

c語言求助!知道數組首地址怎麼求出數組元素地址

單維數組名就是首地址,多維數組名就是第1維的首地址,因此取首地址,可以把數組名賦給對應的指針變數,或取索引為0的首個元素地址賦給對應的指針變數。舉例:
單維
int
arr[10];
int
*
p
=arr;

int
*
p
=&arr[0];
二維
int
arr[10][10];
int
(*p)[10]
=arr;
或int
(*p)[10]
=
&arr[0];//
取第一維地址
int
arr[10][10];
int
*
p=
&
arr[0][0];
//
取多維中的首個元素

㈡ C語言中如何指定數組的首地址在指定的地址

據我所知,創建數組需要2個參數,1是地址,2是分配空間。空間分配是不能重復的,也就是說創建2個數組,這兩個數組是不可能重合的,為了防止這種事情出現,所以不能指定地址。而是編譯器自動分配,不能人為。
但是可以省去分配空間這個步驟,而是只創建地址,這就是指針的概念。比如int a[12],你若是想創建另一個代替a[12],可以int *p=a;這樣,p的值就是a數組的首地址了。int *p =(int*)0x80000;意思就是p[0]的地址是0x80000,創建的時候要確定(int*)0x80000已經分配過了,可以使用了,不然就相當於野指針,容易出錯。

㈢ C語言關於字元串數組取地址的問題。到底要不要&呢

格式"%s"輸入字元串到字元數組不需要加取址符&

㈣ c語言,關於對數組名取地址

准確的說法,是變成了二級指針。
而二級指針,是指向指針地址的指針,變相相當於一個第一維度只有1的二維數組。
其中的根源,在於C語言中,聲明一個數組其實相當於申請了一個定長的指針(存儲位置不同,使用上還是有區別的),你可以將數組名當做指針使用,而反過來,也可以將一個指針,以數組的方式合法訪問其成員。而二維數組的聲明後,A[1][3],之後A[0]是一個一維數組,同樣A[0]保存的,也是這個一維數組的地址,A保存的是A[0]的地址,和二級指針相同。

㈤ C語言數組的地址

其實你這個疑問是概念上的混淆,或者說對指針了解上上的欠缺

首先講int a[3] = {2,3,4};
這里的a是這個數組的首地址,比如定義如:int *p = a;這時如果你進行如下操作:
p++;
printf("%d\n",*p);
結果會是輸出2,也就是說p+1相當於數組索引加1,但是像你所問的為什麼&a和a是相同的 ,首先要知道他們分別代表什麼意思,a:像上面所說的是數組的首地址,做自加運算會根據數組類型來計算偏移量,那麼&a是什麼東西呢,實際上它也是一個指針,是指向一個具有3個元素的數組的指針,如何理解,看以下定義:

如果你定義int *q = &a;這時編譯器肯定報錯,繪制出數據類型不一致,那麼你這樣樣定義就沒有問題:int (*q)[3] = &a;這時如果你再對q進行++操作,那麼加的就不同了,如相面的p++操作後p的值會加4,而這里q++操作後的值會加12,也就是跳過3個數組元素,然而,確實這兩個指針的初始值是一樣的,只是類型不一樣而已,這對二維數組的訪問時很方便的,這個你可以參照2維數組得到進一步理解,講的有點亂,不知道你能不能理解

㈥ 關於C語言中對數組取址的問題,詳見補充:

對於一個數組來說,數組名是一個地址常量
並不是說是一個地址常量就沒有地址(也就是存儲常量的存儲單元)
當程序沒有被調入內存時候,是由三部分代碼組成的,依次是二進制代碼區(text segment),已經被初始化的靜態或者全局變數區(data segment),沒有被初始化的靜態或者全局變數區(bss segment),常量都是存放在data segment區
當程序被調入內存之後,就在三部分的基礎上又被分配了堆區和棧區,棧區用來存放臨時變數,參數和返回值等臨時的變數
就相當於我們定義char *a="12345",我們都知道這里的「a」是main()中定義的一個指向字元串「12345」的指針,那麼「12345」是存放在哪裡的呢,就是存放在data segment區的,而「a」變數本身確實存放在程序調入內存後被自動分配的棧區
強制轉換的本質上是不改變存儲單元中的01代碼組合的,只是告訴編譯器這個單元的數據將要被作為什麼數據處理,例如一個指針變數占據4位元組,一個int變數也是四個位元組,我們就可以把int強制轉換成指針的,需要的時候再把指針轉換成int,輸出int型結果時是不發生變化的
在這個題目中,「a」是一個數組名,也就是一個地址常量,這個常量存放在data segment區,「&a」取了「a」的地址,也就是一個指向「a」的指針,所以第三個語句是把指向「a」的指針進行了強制轉換,第一個語句直接轉換的「a」,第二個語句強制轉換指向「a[0]」的指針

㈦ C語言中 用scanf函數輸入字元串數組,取地址符&是不用輸的,如果輸了取地址符算錯么 ,或者含義不一樣么

  1. 一般變數使用取地址符,是獲取其地址,即為指向該變數的指針。

  2. 數組名就是數組的首地址,指向該數組的第一個元素的指針,只不過是常量指針而已。所以不用再加取地址符。

  3. 要加的話可以如下:

    char str[10];

    scanf("%s", &str[0]); // 取第一元素的地址,等價於數組名 str

㈧ C語言結構體數組,輸出中加取地址符是為什麼

取地址符&作為一元運算符,結果是右操作對象的地址。例如&x返回x的地址。地址本身是一個抽象的概念,用於表示對象在存儲器中的邏輯位置。
scanf("%d,%d",&x,&y);這里的&x表示x的地址,&y表示y的地址。scanf接收地址,然後把鍵盤(更確切地說是stdin輸入流緩沖區)讀入的信息按格式字元串的形式處理後存放到接收到的地址中。對於純C來說,函數的參數是只能值參而不是變參,函數內部對參數的改變隻影響參數本身而不影響調用函數時的實際參數(換句話說函數內部的只是副本)。所以這里不能向scanf傳遞x本身,需要用地址&x指明需要存放的位置,才能把值存到x中。
輸出中使用&,例如printf("%X",&a);
作用就是把變數a的物理地址用16進制的方式輸出。

㈨ c語言數組、地址問題請高手解釋

定義了數組a,則機器在內存當中給數組a開辟一片內存存儲數組a,數組a的元素是順序存儲的,所以說數組a所在的地址就是數組a第一個元素所在的地址,這兩個指針(&a,&a[0])其實算是指向同一個地址的,所以列印出來的數值是相同的。

%p應該是64位32進制形式輸出,%d是十進制形式輸出的。&a[0]跟a其實是一回事,是相等的,所以第一行的第二個數,換算成十進制就跟第二行的第一個數是相等的。0x22FE30=2293296。

㈩ c語言中"&取地址"是什麼意思

找到變數在內存空間的位置,對變數進行操作時,會找到該處。

熱點內容
安卓系統網路播放器哪個好 發布:2025-02-06 20:42:02 瀏覽:814
頭條緩存的視頻格式 發布:2025-02-06 20:32:18 瀏覽:113
ftp不顯示文件夾 發布:2025-02-06 20:30:37 瀏覽:123
蘋果手機解壓怎麼打開 發布:2025-02-06 20:29:35 瀏覽:473
單片機程序存儲器 發布:2025-02-06 20:29:31 瀏覽:206
串的c語言 發布:2025-02-06 20:25:44 瀏覽:745
編程函數總結 發布:2025-02-06 20:09:11 瀏覽:316
編程obj 發布:2025-02-06 19:59:52 瀏覽:844
津貼腳本 發布:2025-02-06 19:44:10 瀏覽:741
好分數里如何修改密碼 發布:2025-02-06 19:42:30 瀏覽:157