一道C語言中的指標問題,一道C語言的指標問題

2021-03-04 08:53:54 字數 3615 閱讀 7010

1樓:匿名使用者

#include

void main()

2樓:匿名使用者

第乙個空填char* str1, *str2;

後面如樓上所說。

3樓:匿名使用者

p1++;

*(p1++)=*(p2++);

一道c語言的指標問題

4樓:匿名使用者

a) char s[5]="abcde" bai//字串這樣賦值時,末尾有乙個du預設的zhi串尾符\0,所以字串"abcde"的實際長度是dao

回6,s[5]是儲存不下的,溢位答

了b) char *s; gets(s);

//char *s只是宣告了乙個指標,並沒有分配儲存空間,所以用gets(s);給s賦值時,會導致野指標訪問異常

//scanf使用%s控制符讀取字串時,要求傳遞的是字元陣列的首位址,也就是s,不是&s

c語言指標的賦值問題

5樓:大野瘦子

指標在用要注意初始化,例如:

int *p;

p為指標,位址是未知的,如果直接賦值

*p=a;這樣編譯可以通過,但是會產生警告,p的位址是隨機分配的,這樣對未知的位址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。

可以int *p=&a;

或者int *p;

p=&a;

然後再對p進行操作

有錯。注意大小寫,還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

指標的賦值

int *p;

int a;

int b[1];

p = &a;

p = b;

指標的賦值,「=」的左運算元能夠是*p,也能夠是p。

當「=」的左運算元是*p時,改變的是p所指向的位址存放的資料;

當「=」的左運算元是p時,改變的是p所指向的位址。

陣列的變數名b表示該陣列的首位址,因此p=b;也是正確的

同型別的指標賦值:

int val1 = 18,val2 = 19;

int *p1,*p2;

p1 = &val1;

p2 = &val2;

p1 = p2;   //注意啦,p1指向了val2,而沒有指向val1

備註:字串與指標的初始化和賦值

初始化:

char *cp = "abcdefg"; //這個初始化過程,是將指標cp指向字串的首位址,而並非傳遞字串的值。由於,在c語言裡面,沒有總體處理乙個字串的機制

賦值:cp = "abcdefg";

*cp=」abcdefg」 ;//錯誤!字串常量傳遞的是它的首位址,不能夠通過*cp改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。

6樓:林聲飄揚

有錯注意:用指標變數前,必須對指標變數賦值如:int i, *p1;

p1=&i;

再如:int a, b;

int *p1, *p2;

*p1=10; *p2=100;

但指標變數未賦值,即指標指向未知位址,這樣是錯誤的因此:絕對不能對未賦值的指標變數作「指向」運算。

int a=9,b;

int *p=&b;//必須加上這一句

*p=a;

*p=8;

這樣就不會產生錯誤

7樓:匿名使用者

注意大小寫!還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

8樓:七先生是遊戲鬼才

這個還是比較複雜的,你可以學習一下

9樓:匿名使用者

p=&a//把a的位址給指標p

10樓:匿名使用者

語法上沒錯,但可能出現警告,破壞程式其他資料

11樓:渾濃強浩然

p就是乙個指標,他指向乙個位址,而&p就是p剛才所指向的具體位址,*p是p指向位址裡面的東西。也就是值。*p=&a的意思是把a的位址給了*p,這樣的話p就指向

(指向a的位址)的位址。對指標賦值必須是int*p=null;或者int

*p;p=null。

一道c語言指標的問題 求解答 謝謝 !

12樓:匿名使用者

&c和&ca:這兩bai個是肯定不相等的du,c是指向字串的zhi首位址dao即c的值等於字串的首內位址,而容c本身需要乙個位址空間存放即&c(就像i=3,i的值等於3,而&i是存放3的位址)。當把c傳入fun時,ca也指向該字串即ca的值等於c的值的副本,而這個值也許要乙個位址空間存放即&ca。

所以他們不相等。

++ca和&c[1]:這兩個值是相等的,他們都是存放b的位址。這裡要理解的是,把c傳入fun時並沒有建立整個字元陣列的副本,只是建立了指標c的副本,所以c和ca同時指向乙個字串。

&ca[1]和&c[1]:這兩個值也相等,他們和上面的其實是乙個意思。只是若編寫程式驗證時,若先驗證++ca則驗證&ca[1]之前先要ca--。

c和&c:由上知不相等。

13樓:匿名使用者

c 和&c不相等,&c 代表整個陣列的首位址,c是首元素的位址。&ca 只有當有引數傳進來的時候 才有意義。如果 函式 fun(c)這樣的話,是相等的。

14樓:匿名使用者

&c 和&ca : ca是函式裡的只是個變數由你賦給誰++ca 和&c[1] :這兩個是兩個完全無關的東西、&ca[1] 和 &c[1]:

這版與第乙個同理c 和 &c:c是個char變數時權陣列,&c是指標賦值用的不相等

15樓:匿名使用者

在定義的時候,

bai系統分配空du間給zhic和ca;其實你可以理解成daoc和ca是兩條街道內,組數里

面的元素是容街道的小房子,裡面的數就是門牌號碼。這樣好理解吧。。。。

當然,要求是你呼叫 void fun(char ca[10]){}; 的時候,理解成街道一模一樣,房子裡面的構造也一樣,但是位址不一樣。

&c 和&ca 分別表示c街道的第一間房子的位址和ca街道的第一間房子的位址,但是c和ca兩條街道位址本來就不一樣啊。

++ca 和&c[1]是不相等的,ca的位址和c的位址是不一樣的,用回上面的比喻,++ca理解成第一間房子的後面一間房子的位址,&ca[1]理解成ca街道第一間房子的位址。

&ca[1] 和 &c[1] 仿照第一問。

所以&c 和&ca 不相等,++ca 和&c[1]不相等,

c 和 &c 按照我上面的比喻應該是不等的,但是我執行了一下,是相等的!

我想應該是因為,組數的元素存放在位址裡,位址是最終的儲存位子吧,我也不是很明白,知道後和我說下。。。

c語言一道題,C語言一道題

程式 如下 include int main printf n printf 總和為 d n sum return 0 include void main 教材上面應該有這個啊 include long fun int a,int n int j long s 0,t 0 for j 0 j n j...

一道c語言題目,一道C語言題目

include include 標頭檔案 include 標頭檔案 int main int a 111 b 100 c 111 n,m,k 0,t,l 0,s scanf d d n,m srand unsigned time null srand 就是給rand 提供種子 for int i 0...

一道C語言的題,一道c語言題

其實他是有不同的,就是?後面應該是表示式,而不是可執行語句,是有返回值的,他適用於給同乙個變數賦不同的值,如果你的那個程式是這樣的。x f x1 f x 0 x1 x2 那麼這個程式就是可以的,但是你這個?後面的 裡面卻是賦值語句,所以產生了錯誤!你這個是給不同的變數賦相同的值 你看我這麼說對嗎?你...