當前位置:首頁 » 編程語言 » c語言中變數接收數組的地址
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中變數接收數組的地址

發布時間: 2023-01-12 14:07:49

『壹』 關於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語言中變數的地址是什麼類型的

變數的地址,在C語言中,一般寫作指針類型。
不同類型的變數地址,用不同的指針進行保存。
比如,char 類型的地址,使用char*保存,而int型地址,用int *保存。

除此外,部分情況下也會採用整型類型來保存變數地址,具體使用何種整型類型,取決於編譯器:
1 16位編譯器,地址佔16位,2位元組,可以使用short或者int保存。
2 32位編譯器,地址佔32位,4位元組,可以使用int或long保存。
3 64位編譯器,地址佔64位,8位元組,可以使用long保存。
不過不推薦使用整型類型保存地址,會帶來移植上的不通用。

『叄』 請教c語言中形參是數組名這個數組名是地址常量那麼怎麼接收實參數組名

實參是數組名,即一個地址,形參是數組名,所接收的同樣是一個地址,就是所謂的傳址調用。靠傳遞地址來實現對參數的調用。

『肆』 c語言中,怎麼把數組的地址傳給一個int型變數

數組地址都可以弱化為指針常量(事實上C的編譯器就是這么處理數組的),默認情況下可以直接賦值給其他指針變數一般int類型是4位元組,而指針變數的長度和編譯器有關,所以直接賦值是非常不安全的(雖然可以這么做,比如char str[100];int a= (int)str;但是我個人極力反對,因為這不是指針正確的用法)

『伍』 C語言,怎樣把數組的首地址賦給另一個數組

  1. 不能把數組的首地址賦給另一個數組。因為數組名是常量指針類型,初始化之後是不能夠被修改的。

  2. 有兩種辦法實現類似功能,一種是創建指針變數,把地址直接賦值指針變數:

    例如 int a[100]; int *b=a;

    第二種就是直接用循環一一復制每個元素。

    例如 for(i=0;i<strlen(a);i++) b[i]=a[i];

『陸』 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.值傳遞就不寫了,顧名思義就是把當前的值傳到下一個函數中,變數本身的沒有發生任何變化

2.指針傳遞,把當前變數指針傳到下一個函數,在另外函數里邊修改指針的值會修改當前變數值

#include <stdio.h>

  void func(int *p){

                *p = 9;

                return;

    }

void swap(int *a, int *b){ //交換兩個變數的值

        int temp = *a;

        *a = *b;

        *b = temp;

}

int main(void){

            int a = 0;

            func(&a); //要修改一個變數,把他的地址傳過去

            printf("%d",a);//9

            int b = 3;int c = 4;

            swap(&b,&c);

            return 0;

}

『捌』 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語言實現調用函數的返回值為一數組的地址

就是返回一個數組的地址,比如:

int* Fun(int pArray[])
{
return pArray;
}

int pArray[] 作為參數和 int *是一樣的
因為不能返回局部變數 函數的返回地址就是形參的

你要知道 你局部變數的地址是不能返回的
所以,我還是返回一個動態的地址

int* Fun()
{
int *pInt = new int[100];
return pInt;
}

這樣就可以了
還有啊 最後記得釋放pInt啊