關於c語言的幾個問題。麻煩大家幫幫忙!謝了

時間 2021-08-11 15:50:01

1樓:匿名使用者

想徹底明白這個問題需要一定的編譯原理基礎。

程式在編譯完成以後,所有變數名都將被替換為記憶體地址。

函式內部的區域性變數佔用的記憶體是執行時堆疊,而函式自己會有一個**記憶體區用來存放函式**。函式**包括cpu執行所需要的指令,比如判斷,轉向,運算等等。所有由主函式呼叫的函式,它們**在主函式開始執行的時候就固定不變了。

而函式所操作的資料,即函式內部的區域性變數,它們的記憶體地址確是不固定的,因為執行時堆疊隨時都在變化,每次執行某個函式,它內部的區域性變數的地址都是不固定的。

但是由於函式**區的資料是固定不變的,如何讓固定的**去操作記憶體地址不確定的變數呢,這裡就引入了相對地址,即函式內部區域性變數相對於函式堆疊起始位置的地址(函式堆疊起始位置的地址是由作業系統提供的),這樣函式**所操作的變數的地址就變成了,函式堆疊起始位置+相對地址(也叫偏移量),而這個相對地址是固定不變的。函式在不同時間執行,相對地址是不變的,變化的只是函式堆疊起始位置,但是這個起始位置,是由作業系統管理的,函式自己不用操心。

所以說,區域性變數要在編譯時分配空間,實際上是指,在編譯時確定每個變數的相對地址(即偏移量),確定相對地址的前提就是區域性變數必須已知型別,大小,否則編譯無法通過。

2樓:匿名使用者

書上說的是對的。

區域性變數在編譯的時候就已經分配的儲存空間,即使指標變數也如此,因為函式的等級是相同的,所以變數的空間分配也是一樣的。

只有程式在執行中新申請的記憶體單元才是執行時分配的。比如使用malloc()、calloc()函式申請的地址單元。

3樓:匿名使用者

當沒執行一個函式.程式都先要把一個函式用到的變數壓棧..就是在你還沒有執行到你的語句的時候函式已經壓棧.

如果你沒分配空間.他壓棧就不知道要分配多少空間..在此之前你函式裡面的語句還沒有執行.

又怎麼能手動非配空間.

4樓:手機使用者

區域性變數一般是在執行函式的時候分配記憶體空間,例如某函式void func(int a),其中的形參變數就是在執行函式的時候才分配記憶體空間。

全域性變數是在編譯階段分配記憶體空間。

而巨集定義 #define 和 標頭檔案 都是在預編譯階段進行處理。

這是我記得的。

5樓:匿名使用者

變數有全域性變數和區域性變數,它們的作用域不一樣,你可以參照一下相關教材。全域性變數是在編譯的時候分配空間,區域性變數是在執行的時候分配空間。一般來講,編譯系統會將全域性變數初始化為0,但區域性變數則不然,裡面存的是隨機數,所以區域性變化要用程式來初始化。

變數的是以位元組為單位進行儲存的,不同型別的變數,所佔用的位元組長度也不一樣,所以,每個變數都要指明其型別。

問幾個c語言的題,請大家幫幫忙

6樓:高金山

32、求出4*4階矩陣的最小值及其所在的位置。

#include

int main()

return 0;

} 34、將一個字串逆置後接到原串的後面。

#include

int main()

35、將字元陣列a中的字串複製到字元陣列b,不允許使用字串複製函式。

#include

int main()

36、將字元陣列a中的字串中的每個字元按加4的方法加密到字元陣列b,輸出陣列a與陣列b中的字串。

#include

int main()

37、輸入一個字串,輸出每個大寫英文字母出現的次數。

#include

int main()

,i;gets(a);

for(i=0;a[i]!=0;i++)

if(a[i]<='z'&&a[i]>='a')n[a[i]-'a']++;

for(i=0;i<26;i++)

printf("%d ",n[i]);

return 0;

} 38、有五個學生,每個學生有四門課程,將有不及格課程的學生成績輸出。

#include

int main()

if(b==0)

return 0;

} 39、用選擇排序法對一維整型陣列中的十個數升序排序。

#include

int main()

for(i=0;i<10;i++)

printf("%d ",a[i]);

printf("\n");

return 0;

} 40、用起泡排序法對一維整型陣列中的十個數升序排序。

#include

int main()

for(i=0;i<10;i++)

printf("%d ",a[i]);

printf("\n");

return 0;}

7樓:

32:main()

printf("min=%d, i=%d, j=%d",min,m,n);

}33:直接定義了4*4階矩陣

main()

34:#include

void fun(char *s,int n)printf("%d",count);

}38:

main()

}39:

main()

printf("the sort array value:");

for(i=0;i<10;i++)

printf("%d",a[i]);

} 好累啊,你自己除錯下啊,有問題hi我

8樓:堵凡邇

#include "stdafx.h"

#include

void bijiao(int a[10])} }}void main()

;for(i=0;i<10;i++)

printf("\n");

bijiao(a);

for(i=0;i<10;i++)

printf("\n");}

9樓:匿名使用者

呵呵,我考試的時候怎麼沒想著上網上讓大家幫幫忙?唉!

10樓:匿名使用者

是考試複習題吧,您可夠懶的了。給出一些簡化的答案吧。

32.#include

int mat[4][4];

void main()

{int min, i,j;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if (mat[i][j]='a' && s[i]<='z')count[s[i]-'a']++;

for (i=0;i<26;i++)

printf("%c %d\n", 'a'+i, count[i]);

38,39,40太麻煩了。不想寫了。

關於c語言的問題,引用,大家幫幫忙吧~

11樓:

float f1(float=5);

float是返回型別,r是形參,但還是呼叫不能這樣寫啊。應該是 f1(5);

12樓:匿名使用者

float a = f1( 5 );

13樓:匿名使用者

去掉 &;

寫法如下:

float a=f1();

樓主請試一下,望採納!

14樓:匿名使用者

把float f1(float=5);

float&a=f1();

去掉寫成:float a=f1(5);

關於C語言程式的幾個問題,關於C語言的一個問題

1.1 沒有 因為 a 0 為假,如果你看過 c陷阱與缺陷 就該知道 與 具有短路現象 即如果邏輯運算子 前半個表示式的值可以決定整個表示式的真假,那麼就不會運算判斷後半個表示式 例 int a 100 3 2 a 5 10 因為3 2為真,可以決定整個表示式的值為真了,已經沒必要判斷後面的真假了,...

關於玉器我有幾個問題,請大家幫幫忙

1 這個說實話我不清楚,一般愛玉的都玩和田玉,翡翠好的沒幾個人玩的起。不過現在帶和田玉的比較多,應該都認為護身方面好點吧 2觀世音 個人意見 人人都帶,必有它的好處!3這個問題就像你說的,信則有,不信則無。九華山開光倒是挺有名的,還是那句話,人們都去九華山,必有去那的原因 4玉器店裡的99 都是沒開...

c 的幾個問題

這個問題我以前也碰到過且沒解決,但真正幹這行以後就從來沒見過了,現在想碰都碰不到。你把工程目錄下的debug資料夾刪掉,把工程目錄下的.ncb.opt.aps.plg這四個檔案刪掉,然後全編譯一下試試 不行的話就去看看這位大哥說的吧,我現在都遇不到了也不好做實驗,看看他說的吧 在生成1.exe這個程...