Ⅰ c語言中,數組的起始地址是什麼
數組變數的起始地址不定。
如定義:
int a[10];
int *p;
p = &a[0];
起始地址可以這樣列印a數組起始地址:printf("address:%x\n', p);
你要知道這個干什麼?
Ⅱ 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語言數組和地址問題
1、字元數組c在內存中佔用4個位元組,值分別為8,2,0,0
2、強制轉換後,整型指針p指向這個字元數組的起始位置(當前情形為值8所在的那個地址)
3、在小端格式下,p指向的整數被解釋為00000208。這個16進制值(208)對應10進制值520。
這里的16進製表示只是為了便於顯示,大家都知道實際上是以2進制存儲的,學東西要靈活一些。你最好用調試器自己看一下,這比別人講十遍都管用
Ⅳ C語言數組的地址怎麼看
&buf的指針類型的類型是int (*)[100]
所以&buf+1即buff+100,即&buff[100],即數組最後一個元素佔用內存後的地址位
Ⅳ C語言中數組地址的表示方法
數組變數就是它的首地址啊
Ⅵ c語言 數組怎麼輸出它的地址
你循環語句裡面找到最小值之後加printf(「%d\n」,i);就可以了,這里i是你循環的那個參數,也就是數組下標。
Ⅶ 關於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語言數組地址問題
解釋如下:
&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;
}