我對學習 C 語言還很陌生,在陣列的背景關系中處理指標讓我很困惑。我有一個原始陣列,它提供了多個重復的整數值。我要做的是創建一個新陣列,并使用指標而不是括號中的數字將每個整數中的一個僅傳遞給新陣列,但我得到的輸出是非常錯誤的。我不確定比較原始陣列中的整數是否存在問題,或者比較后更新新陣列是否存在問題。PS這是我在stackoverflow上的第一篇文章,所以如果我的格式不正確或遺漏了相關細節,我深表歉意
這是我的代碼:
#include <stdio.h>
void main(){
int original[14] = {3, 4, 5, 3, 2, 6, 3, 4, 2, 3, 2, 3, 3, 4};
int values[14];
int count[14];
int x = 0;
int i, valCheck, *ip, *vals;
int valsAdd = 0;
int n = 14;
vals = values;
for(ip = original; ip < original n;ip ){
valCheck = 0;//using this as a Boolean to determine whether the number is a duplicate or should be added to the array
for(int j = 0; j < 14;j ){
vals = &values[j];
if (*vals == *ip){
valCheck = 1;
}
}
if (valCheck ==0){
vals = &values[x];
*vals = * original;
x ;}
}
for(i=0;i<14;i ){
printf("Value %d\n", values[i]);
}
}
這個想法是內部 for 回圈決議新陣列以確保該數字不在其中,如果不是,則將其添加到索引 x 處的新回圈,然后遞增 x,最后列印整個回圈。我期望的輸出是:
Value 3
Value 4
Value 5
Value 2
Value 6
Value 0
Value 0
Value 0
Value 0
Value 0
Value 0
Value 0
Value 0
Value 0
但是,這是我得到的輸出:
Value 3
Value 3
Value 3
Value 3
Value 3
Value 3
Value 3
Value 3
Value 3
Value 0
Value 0
Value 0
Value -449459208
Value 32766
有人知道我在這里做錯了什么嗎?
uj5u.com熱心網友回復:
首先,請記住 C 中的自動變數沒有任何初始值(除非您明確初始化它們),因此您的values陣列可以包含隨機值。另外,我認為您需要使用*vals = *ip;而不是*vals = * original;. 這段代碼對我有用:
#include <stdio.h>
void main(){
int original[14] = {3, 4, 5, 3, 2, 6, 3, 4, 2, 3, 2, 3, 3, 4};
int values[14] = {0};
int count[14];
int x = 0;
int i, valCheck, *ip, *vals;
int valsAdd = 0;
int n = 14;
vals = values;
for(ip = original; ip < original n; ip ) {
// using this as a Boolean to determine whether the number is a duplicate or should be added to the array
valCheck = 0;
for(int j = 0; j < n; j ) {
if (values[j] == *ip){
valCheck = 1;
}
}
if (valCheck == 0) {
values[x] = *ip;
x ;
}
}
for(i = 0; i < 14; i ) {
printf("Value %d\n", values[i]);
}
}
values我將陣列的所有元素初始化為0, 您可以使用-1或任何其他為您指示空房間的值。C 具有動態記憶體分配malloc等,您也可以根據需要使用它來增加陣列大小。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532300.html
標籤:数组C指针
下一篇:如何將不同大小的矩陣相乘?
