當前位置:首頁 » 編程語言 » c語言中如何表示某數組元素地址
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中如何表示某數組元素地址

發布時間: 2022-12-22 22:03:28

『壹』 c語言中如何用指針運算符來表示一個二維數組的元素及地址

二維指針,就是說第一維是指針,第二維還是指針;
拿*(*(a+i)+j)來說:a是數組的首地址吧,然後+i,就是說a地址向後偏移i位。就是a+i的地址了,注意,這里a+i只是地址,用*符號取出該地址的數據,就是*(a+i),這里*(a+i)就是第一維指針,它指的是地址,不是數據。
而且後面的*(a+i)+j就是說以*(a+i)為首地址,偏移j位,然後使用*取內容,這里就是第二維了,取到的數據就是實際數據了

『貳』 C語言數組的地址怎麼看

&buf的指針類型的類型是int (*)[100]

所以&buf+1即buff+100,即&buff[100],即數組最後一個元素佔用內存後的地址位

『叄』 c語言中元素地址是什麼

是計算機為每一個元素都開辟了內存空間,其中各個元素有自己的內存地址,要訪問元素就要知道地址

『肆』 C語言 數組元素 地址

a[2][3] = {{2,4,6},{8,10,12}};
A:*a為第一行數組首地址,+1第一行第2個元素的地址。
B:a[1]=*(a+1),+2後進行*操作即獲得第2行第3個元素。
C:a[1]=*(a+1), +3後超出數組維數,是一個垃圾內容的地址。
D:忽略

『伍』 C語言數組地址問題

解釋如下:

&a,*a,a,a[0]——都表示的是數組第0行第0個元素的地址;

*a[0]——這個特殊,表示第0行第0個元素的地址的地址;

a[2],&a[2]——都表示第2行第0個元素的地址;

&a[2][2]——表示第2行第2個元素的地址;

詳見圖片,我已經把數組中主要元素的地址和值都列印出來了,數組中對應的每個元素的地址寫出來了,對照的找下對應元素的位置,應該能理解&a,*a,a,a[0],*a[0],a[2],&a[2],&a[2][2]是什麼意思了

#include<stdio.h>
#include<stdlib.h>

intmain()
{
inta[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};

printf("&a十六進制地址是%p,十進制是%d ",&a,&a);//數組名,a[3][4]
printf("*a十六進制地址是%p,十進制是%d ",*a,*a);
printf("a十六進制地址是%p,十進制是%d ",a,a);
printf("a[0]十六進制地址是%p,十進制是%d ",a[0],a[0]);
printf("*a[0]十六進制地址是%p,十進制是%d ",*a[0],*a[0]);
printf("a[2]十六進制地址是%p,十進制是%d ",a[2],a[2]);
printf("&a[2]十六進制地址是%p,十進制是%d ",&a[2],&a[2]);
printf("&a[2][2]十六進制地址是%p,十進制是%d ",&a[2][2],&a[2][2]);

printf("數組a[3][4]首元素a[0][0]的地址是%p,首元素a[0][0]的值=:%d ",&a[0][0],a[0][0]);
printf("數組a[3][4]首元素a[2][0]的地址是%p,首元素a[2][0]的值=:%d ",&a[2][0],a[2][0]);
printf("數組a[3][4]首元素a[2][2]的地址是%p,首元素a[2][2]的值=:%d ",&a[2][2],a[2][2]);
printf("一個int整型變數占的位元組是:%d",sizeof(int));
return0;
}

『陸』 數組元素地址的表達方式,c語言問題求解…!!

A和B一看就是錯的,因為計算機本身計數是從0開始,就是說,如果有三個元素在數組中,那麼它們的編號就是0、1、2,而不是1、2、3(由工作原理決定的)。
剩下的C和D:
C:t[1]表示的是t這個數組的第2個元素的地址(也同時代表這個地址所存儲的值)。
D:*t[2]表示的是t這個數組的第3個元素的地址的指針形式。

『柒』 C語言中數組地址的表示方法

數組變數就是它的首地址啊

『捌』 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語言:數組的值是地址

不對。
數組名是數組的首地址,就是數組中第一個元素的地址,是常量。常量是不能出現在賦值號=左邊作為左值的。樓上的都沒有解釋清楚,說數組名就是指針是錯誤的,指針是變數,是用來存儲變數地址值的變數,而數組名是常量。一般情況下聲明一個數組,比如char a[10];之後,數組名a都是數組的首地址,是一個地址常量。但是在函數聲明的形參列表中除外。比如:int foo(char a[10]);在這種情況下這樣的聲明與int foo(char a[]);int foo(char * a);是等價的,就是說這種情況下,就算你寫的是數組的形式,編譯器實際處理的時候也當指針來處理(注意指針是變數,形參也是變數,二者剛好對應)。所以在函數foo內部,你對a進行++, --, +=,=之類的帶賦值的操作是完全合法的,因為此時a就是一個指針,不是數組名,當你往函數foo裡面傳入一個已經事先聲明的數組的首地址時候,指針a裡面的值就是你這個已經聲明的數組的首地址,這樣你在foo裡面就可以對你那個數組進行操作,正是因為C有這個傳地址的優點,所以省略了很多不必要的拷貝工作,試想如果沒有這個傳地址,你傳一個有幾萬個元素的數組進去,那拷貝工作是相當可觀的。這樣,你該明白了int main(int argc, char ** argv);裡面為什麼可以對argv進行++操作了,既然「main函數的第二個形參是一個指向字元串的指針數組」,argv出現在函數聲明中,所以它實際上是一個指針,它並不是「一個指向字元串的指針數組」,而是一個可以獲取「一個指向字元串的指針數組」的首地址值的變數。

『拾』 C語言多維數組地址計算請舉例說明

一、多維數組地址的表示方法

設有整型二維數組a[3][4]如下:

0 1 2 3
4 5 6 7
8 9 10 11

設數組a的首地址為1000,各下標變數的首地址及其值如圖所示。
C語言允許把一個二維數組分解為多個一維數組來處理。因此數組a可分解為三個一維數組,即a[0],a[1],a[2]。每一個一維數組又含有四個元素。例如a[0]數組,含有a[0][0],a[0][1],a[0][2],a[0][3]四個元素。 數組及數組元素的地址表示如下:a是二維數組名,也是二維數組0行的首地址,等於1000。a[0]是第一個一維數組的數組名和首地址,因此也為1000。*(a+0)或*a是與a [0]等效的, 它表示一維數組a[0]0 號元素的首地址。也為1000。&a[0][0]是二維數組a的0行0列元素首地址,同樣是1000。因此,a,a[0],*(a+0),*a,&a [0][0]是相等的。同理,a+1是二維數組1行的首地址,等於1008。a[1]是第二個一維數組的數組名和首地址,因此也為1008。 &a[1][0]是二維數組a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。因為在二維數組中不能把&a[i]理解為元素a[i]的地址,不存在元素a[i]。

C語言規定,它是一種地址計算方法,表示數組a第i行首地址。由此,我們得出:a[i],&a[i],*(a+i)和a+i也都是等同的。另外,a[0]也可以看成是a[0]+0是一維數組a[0]的0號元素的首地址,而a[0]+1則是a[0]的1號元素首地址,由此可得出a[i]+j則是一維數組a[i]的j號元素首地址,它等於&a[i][j]。由a [i]=*(a+i)得a[i]+j=*(a+i)+j,由於*(a+i)+j是二維數組a的i行j列元素的首地址。該元素的值等於*(*(a+i)+ j)。

試一下以下程序段

#define PF "%d,%d,%d,%d,%d,\n"
main(){
static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
printf(PF,a,*a,a[0],&a[0],&a[0][0]);
printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);
printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]);
printf("%d,%d\n",a[1]+1,*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}