C 賦值問題

2022-06-10 15:11:44 字數 1402 閱讀 8324

1樓:

你要知道a b=a("2");a=b;和a=a("2);是不同的,前者是在宣告的同時賦值,那麼就不叫賦值了,而叫做複製初始化,而後者才是賦值。

另外用=將乙個物件賦值到另乙個同類物件,如果沒有過載=的話,那麼會有乙個預設賦值操作符,就是直接把=右邊物件的每乙個成員賦值給=左邊物件的相應成員(這種方法也叫做淺拷貝)。

那麼當a=b的時候呼叫的是a的=還是b的=呢?顯然是a的=,所以a=a("2"),即使後面那個臨時變數已經析構了,a=還是可以呼叫成功的,但是由於臨時物件已經析構,所以賦值之後的char* a是無效指標。

所以這裡雖然a b=a("2");a=b;能夠賦值成功,實際上也是有問題的,因為這時候a和b的裡面char* a指向的都是同乙個記憶體區域,在析構的時候會free 2次。

2樓:匿名使用者

void swap( int *a, int *b ) //兩數交換函式

if ( aswap( &a,&b ); //交換ab,下同if ( a< c )

swap( &a, &c );

else if ( bb>c,自己補充全**吧

3樓:

有兩個辦法可選擇:

輸入時,若輸入的b不大於a則要求重新輸入,c不大於b也要求重新輸入;

隨便輸入,然後排序,但這不好處理相等的情況。

關於c++中a[n]的賦值問題

4樓:夜太美

時間過去這麼久了,估計題主也不需要了,我還是答一下方便後來人看吧。

memset是可以的

void* memset(void *_dst, int _val, size_t _size)

_dst是目標起始位址,_val是要賦的值,_size是要賦值的位元組數

我再說一種更簡單的,new就行啦

int x;

cin>>x;

int *a =new int[x];

for(int i=0;i

a[i]=0;

5樓:yy_神

如果要n是可變的,區域性變數做不到。必須要動態申請記憶體

如果你是初學,建議直接用固定的大數,比如 int a[1000]=;

6樓:

錯誤的原因是:陣列a的大小n需要是乙個常數,而不是變數。

應該用:

define n 10

int a[n] = ; // 這一句沒有錯

7樓:射手小小王

memset(a,n,0x00)

8樓:畢設指導

int [n] a;

for(int i=0;i<n;i++)

c語言的賦值問題,C語言指標的賦值問題

上面的說法中,都存在錯誤或不足.1.首先 c a b 的意義是把 a 和 b 這兩個變數的內容 5 和 6 相加得 11,再把 11 這個結果值傳送至 變數 c 所在的儲存單元儲存起來 而不是你想像的 將 a 和 b 這兩個變數組合為一個變數作為 c,或者複製一份變數組合再作為 c.當你用int a...

C符串賦值問題,求高手解答,C 字串賦值問題,求高手解答

型別 變數名 帶雙引號的常量 string a 我是中國人 變數名可以任意起名。不過不能以 數字 漢字 和 符號開頭 除了下畫線 等號後面可以是帶雙引號的任意字段 string abc console.readline 為從控制台窗體輸入值複製給abc 呵呵,這問題搞笑啦!string str va...

C語言指標問題,行指標的賦值與取值

1.p a 1可以。表示p指向陣列a的第1行。2.p a表示p指向陣列a的第0行。3.p a.則 p是陣列a的首地址,這個地址型別是int 4.可以定義成 p 4 但不能p a。因為它們型別不一致。5 p的值與型別與a 0 相等。 菜刀剁菜鳥 1.正確 2.p a是表示p指向陣列a的第0行 p指a ...