我得到了這個代碼:
#include <stdio.h>
#include <string.h>
int main(void)
{
int a[3]={1,2,3},
b[3];
int (*p)[3]= &a;
b = p;
for(int i=0;i<3;i )
printf("%i",b[i]);
}
- 我希望輸出類似于“123”,但我在將 b 陣列分配給 p 指向的內容時遇到問題。
ps -
memcpy( b, p, sizeof(b));做我想做的事,但我想不使用那個功能就做。
uj5u.com熱心網友回復:
線
b = p;
有幾個問題。首先,陣列運算式可能不是=運算子的目標;您不能在像1這樣的單個操作中分配整個陣列。
其次,型別不匹配;p有型別int (*)[3],而b有型別int [3]。陣列不是指標 - 在大多數情況下,陣列運算式“衰減”為指標運算式,但在這種情況下,即使指標也將是不兼容的型別(b會衰減為 type 的運算式int *,而不是int (*)[3])。
不,將一個陣列的內容復制到另一個陣列的唯一方法是使用庫函式memcpy或使用回圈來單獨分配每個元素:
for ( size_t i = 0; i < 3; i )
b[i] = (*p)[i]; // or b[i] = a[i]
而已。
- 初始化不同于賦值。
uj5u.com熱心網友回復:
陣列沒有賦值運算子。您需要以某種方式將一個陣列的元素復制到另一個陣列。
不使用標準功能memcpy,您可以使用普通回圈,例如
for ( size_t i = 0; i < sizeof( a ) / sizeof( *a ); i )
{
b[i] = a[i];
}
或者,如果要使用中間指標,您可以撰寫
for ( int *p = a, *q = b; p != a sizeof( a ) / sizeof( *a ); p )
{
*q = *p;
}
uj5u.com熱心網友回復:
您有一個固定大小的小型陣列,非常適合包裝在結構中,因此您可以這樣做:
#include <stdio.h>
#include <string.h>
struct ia3 {
int data[3];
}
int main(void)
{
struct ia3 = {{1,2,3}};
struct ia3 b;
struct ia3 *p = &a;
b = *p; // struct assignment
for(int i=0;i<3;i ) {
printf("%i",b.data[i]);
}
}
uj5u.com熱心網友回復:
“......但我想在不使用 . 的情況下做到這一點[memcpy(,,)]。”
不清楚為什么memcpy()在這個練習中使用不合適,但它確實比回圈更大的陣列更有效地完成任務。
如果你只想要一個指向陣列的指標......
int a[3]={1,2,3};
//create pointer
int *b = a;//does not copy array a, just points to it
//If an additional array is needed, do this...
int b[3] = {0};
int i = 0;
//to copy, without memcpy(), use this alternative.
for(i=0;i<3i ) b[i] = a[i];//makes copy of array a
for(i=0;i<3;i )
printf("%i",b[i]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/495697.html
上一篇:將Date物件更新為now()
下一篇:選擇器陣列php來刺痛
