我有一個任務要完成,我正在處理一個指標問題。我有一個我創建的結構陣列,并希望將其發送到排序函式。在將其發送到排序函式之前,我想將其發送到列印函式以驗證指標是否正常作業。這是我的代碼...
void print(int arr[], int n) {
int i;
for (i = 0; i < n; i ) {
printf("%s ", arr[i]);
}
printf("\n");
}
//------------------------------
struct Person {
int age;
char name[10];
};
//------------------------------
int main() {
struct Person p1 = {26, "devin"};
struct Person arr[] = {p1};
int n = sizeof(arr) / sizeof(arr[0]);
printf("--Original Array--\n");
print(arr, n);
我嘗試編譯時遇到的錯誤是
a1q4.c: In function ‘print’:
a1q4.c:24:18: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
24 | printf("%s ",arr[i]);
| ~^ ~~~~~~
| | |
| char * int
| %d
我不確定指標如何作業得很好,我試過*在前面使用,arr[i]但它不起作用。有任何想法嗎?
uj5u.com熱心網友回復:
你可以嘗試這樣的事情:
#include <stdio.h>
typedef struct Person
{
int age;
char name[10];
} Person;
void print(Person* arr, int n)
{
for (int i = 0; i < n; i)
{
printf("%s ",arr[i].name);
}
printf("\n");
}
int main()
{
Person p1 = {26, "devin"};
Person arr[] = {p1};
int n = sizeof(arr) / sizeof(arr[0]);
printf("--Original Array--\n");
print(arr, n);
}
uj5u.com熱心網友回復:
為什么不添加另一個帶有一些評論的版本...
#include <stdio.h> // declarations AHEAD of use
typedef struct { // same thing: declarations AHEAD of use
char name[10]; // NB reversed order
int age;
} Person_t; // a user defined 'datatype'
void print( Person_t p[], size_t n ) {
for( size_t i = 0; i < n; i )
printf( "#%d: %s %d\n", i, p[i].name, p[i].age );
}
int main() {
Person_t arr[] = { // more people
{ "devin", 26 },
{ "foo", 42 },
{ "bar", 24 },
};
// int n = sizeof(arr) / sizeof(arr[0]);
// parentheses only necessary for datatypes
// not necessary for instances of data
int n = sizeof arr/ sizeof arr[0];
printf("--Original Array--\n");
print( arr, n );
return 0;
}
--Original Array--
#0: devin 26
#1: foo 42
#2: bar 24
無論是否偶然,您的print()函式定義都充當了它自己的宣告。如果該函式遵循 main(),您將需要一個“函式原型”(函式名稱和引數以及回傳型別的宣告)以使編譯器滿意。與用戶定義的資料型別相同。它們必須在任何使用型別名稱之前宣告(即:定義和實體或訪問一個)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/509954.html
標籤:C排序指针插入排序
