c語言數組是地址
『壹』 c語言中數組變數是地址還是
adjective代表數組的首地址。這本身就是個地址。所以你那句scanf不對。另外,字元數組本身不會自動添加字元串結束符'\0'.這個要特別注意。
『貳』 C語言 數組首地址
a為數組名,代表數組首地址
&a 中的&為取地址運算符
結果都是一樣
『叄』 關於C語言數組的地址
數組名就是數組的首地址啊。
直接使用swaps(a,b)就可以
不過其實你子函數就寫錯了,根本就不是你所說的用數組地址做形參。而是要求用一個 二維數組或者是指針數組作為實參。
正確的代碼如下
#include<string.h>
#include<stdio.h>
chard[100];
voidswaps(char*p,char*q)
{
if(strcmp(p,q)>0)
{
strcpy(d,p);
strcpy(p,q);
strcpy(q,d);
}
}
intmain()
{
chara[]="",b[]="",c[]="";
printf("請輸入三個字元串,每輸入一個字元串按回車確認 ");
gets(a);
gets(b);
gets(c);
swaps(a,b);
return0;
}
voidswaps(char*p,char*q)就是要求傳一個地址(指針),而如果你使用
voidswaps(char*p[],char*q[])則意義就不對了,而是要求一個指針數組
『肆』 C語言如何知道數組的首地址是多少
void e2prom_reads(1,&ptr,4); //這樣調用對嗎?
不對 應該是 void e2prom_reads(1,&ptr[0],4);
或者 void e2prom_reads(1,ptr,4);
『伍』 C語言 數組地址問題
此處的t就是整個二維數組的地址,A選項中t[3][2]不屬於該數組,因為數組下標是從0開始的,這是個3行2列的數組,所以行坐標最大為2,列坐標最大為1;因此B選項中t[3]也不表示任何地址;C選項,t是整個二維數組的地址,所以t+1就是數組第二行的地址,而t[1]代表第二行第列元素的地址;t+2就是第三行的首地址。二維數組名代表數組首地址,t+1代表第二行,t+2代表第三行首地址
『陸』 C語言數組地址引用正確的是
int c[4][5],(*cp)[5];
cp=c;
這里cp是二維數組c的首地址 cp本身也是二維數組
正確的是:C
*(*cp+2) *cp是cp[0][0]的地址 *cp+2就是cp[2][0]的地址
*(*cp+2) 就是cp[2][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語言數組地址問題
int佔用的是4位元組,是你輸出的時候代碼沒寫對
(DWORD)&a[4]-(DWORD)&a[0]
這個差值才是你要的,我這邊顯示的是16
『玖』 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語言中數組首地址和數組第一個元素的地址有什麼區別呢
C語言中數組首地址和數組第一個元素的地址關系如下:
1、它們的地址值是相等的。
2、第1個元素的地址如果是p,則p+1就是第2個元素的地址。
3、數組的首地址如果是p,則p+1就跳過這個數數組而指向這個數組最後一個元素最後一個位元組的下一位元組。
(10)c語言數組是地址擴展閱讀:
數組的創建:在創建數組時,我們必須定義數組的類型和大小,數組的大小不能為0,數組中的元素類型都是相同的。
數組的初始化:在數組創建時,我們也要必須為數組初始化。
一個數組,可以保存一些數據,但是每一個數據不一定有用。或者說,有些時候的數組的數據不一定要輸出,所以我們可以再來開一個相同的數組,來標記模擬是否輸出數組中的某個元素。