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++) 上面的說法中,都存在錯誤或不足.1.首先 c a b 的意義是把 a 和 b 這兩個變數的內容 5 和 6 相加得 11,再把 11 這個結果值傳送至 變數 c 所在的儲存單元儲存起來 而不是你想像的 將 a 和 b 這兩個變數組合為一個變數作為 c,或者複製一份變數組合再作為 c.當你用int a... 型別 變數名 帶雙引號的常量 string a 我是中國人 變數名可以任意起名。不過不能以 數字 漢字 和 符號開頭 除了下畫線 等號後面可以是帶雙引號的任意字段 string abc console.readline 為從控制台窗體輸入值複製給abc 呵呵,這問題搞笑啦!string str va... 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 ...c語言的賦值問題,C語言指標的賦值問題
C符串賦值問題,求高手解答,C 字串賦值問題,求高手解答
C語言指標問題,行指標的賦值與取值