-
這個問題本身有問題。
結果沒有初始化,沒有指向任何空格就傳遞給add函式,這本身就是錯誤的,當然也可以實現,在add函式中申請乙個位址來儲存結果,並將位址發回給結果,但是該位址的**是無法控制的, 容易造成記憶體洩漏。
void add(int *a,int *b,int** r)int *p=(int *)malloc(sizeof(int));
p=*a+*b;
r=p;
-
是的,有問題,現在的考試真的很困難。
void main()
int a = 9,b = 6;
int c;*不定義這個,程式也可以執行,但存在導致系統異常或崩潰的隱患*
int *result = &c;*這更好,不會導致記憶體洩漏*
add(&a, &b, &result);
printf("%d + d = %d",a,b,*result);
void add(int *a,int *b,int** r)*r = *a+*b;
-
不管記憶體洩漏如何,呵呵:
c:void add(int *x, int *y, int **s)
s = (int*)malloc( sizeof(int) )s = *x + y;
c++:void add(int *x, int *y, int **s)
s = new int(*x + y);
不會導致記憶體洩漏的版本:
void add(int *x, int *y, int **s)static int n = 0;
n = *x + y;
s = &n;
-
選擇 b*(p+5) 即 p[5],由於 p 指標指向陣列 s 的第乙個位址,因此 p[5] 實際上是 p[5],即字串終止符'\0'
-
答案是b。
p+5) 返回乙個數值,可以直接排除 C
-
總結。 1. 變數的指標表示變數得到 b。
a) 值 b) 位址 c) 名稱 d) 標誌 2,已定義 int k=2;int *ptr1,*ptr2;而 ptr1 和 ptr2 都指向了變數 k,下面無法正確執行的賦值語句是 b。
a)k=*ptr1+*ptr2 b)ptr2=k c)ptr1=ptr2 d)k=*ptr1*(*ptr2) 3.如果指定:int *p,m=5,n;以下段正好是 d。
c語言問題(指標)。
親愛的,我正在研究這個問題的答案,請耐心等待。
好。 感覺有點難做。
請說。 1. 變數的指標表示變數得到 b。 a) 值 b) 位址 c) 名稱 d) 標誌 2,已定義 int k=2;int *ptr1,*ptr2;而 ptr1 和 ptr2 都指向了變數 k,下面無法正確執行的賦值語句是 b。
a)k=*ptr1+*ptr2 b)ptr2=k c)ptr1=ptr2 d)k=*ptr1*(*ptr2) 3.如果指定:int *p,m=5,n;以下段正好是 d。
-
為此問題選擇 B。 *(a+i)) 不是對陣列元素的正確引用。
-
d 是錯誤的。
在 a 中,p-a 是指標的運算。 這裡 *p=a,所以 p(位址)的值與 a(位址)的值相同,p-a 為 0
在 b 中,a[j] 是 a 中的資料,& 是位址,加上 a * 是值,所以 *(&a[j]) 等價於 a[j]。
-
專案 b,*(a[i]),實際上等同於 a[i]。 取位址字元,&a[i] 表示 a[i] 的位址。 “*address”表示取儲存在該位址位置的值,因此在 *(a[i]) 中,* 和 & 被抵消,這相當於 a[i]。
當然,答案是d。
-
const int *p,其中 p 是指向 const 物件的指標。
int * const p,指標是 const,而不是它指向的物件是 const。
指向 const 物件的指標(指向 const 物件的指標 - C++ 入門)。
怎麼寫? const double *cptr;
CONST 定義 cptr 指向的物件型別,而不是 cptr 本身。 換言之,CPTR 本身不是 CONST,它允許重新分配 CPTR。 它所指向的物件的值(可以是非常量的)不能通過取消引用 cptr 來修改。
1)如果指標指向乙個const物件,則不允許更改它所引用的const的值。
2) 將 const 物件的位址分配給指向普通非常量物件的指標也會導致編譯時錯誤。
3) 不能使用 void* 指標來儲存 const 物件的位址,但必須使用 const void* 型別的指標來儲存 st 物件的位址。
4)允許將非常量物件的位址分配給指向常量物件的指標,無法通過指標修改其值的行為會導致編譯錯誤。但是,可以通過其名稱修改原始變數的值。 不能保證指向常量點的指標指向的物件的值不可修改。
因此,“如果 cptr 是指向 const 物件的指標,則 *cptr 在程式持續時間內保持不變”的說法是錯誤的。
-
前者是指向常量的指標變數。
-
指向“常量”的指標變數可以通過其他方式完成,而無需更改它所引用的變數的值。
-
簡單來說,要看p是什麼,從右到左,首先看到的就是*,所以p是指標,那麼p是什麼樣的指標呢? 再往左看,看到 int,所以 p 是指向形狀的指標。 再往左,你會看到 const,這意味著這個 p 指向的形狀是唯讀的,所以最終結果是:
p 是指向唯讀整形常量的指標。 這意味著 p 的點可以修改,但它指向的點的記憶體值不能修改。
如果是這種情況:const int * const p,因為 p 是直接被 const 修飾的,所以 p 的點不能修改,因為 int 也是 const,所以 p 指向的整形物件不能修飾。
陣列和指標之間的區別:
陣列名稱確實表示指向陣列第乙個位址的指標,但是這個指標很特殊,它的值(指標的值是指標指向的位址)不能被覆蓋,只能覆蓋它指向的內容,換句話說,陣列名稱只能指向陣列的第乙個位址, 如果有陣列 char a;那麼如果 a = a+1; 這是乙個甚至無法編譯的錯誤。 對於普通指標,例如,可能有乙個陣列 char a; 然後定義乙個字元 *p = a; 然後使用 p = p+1 是有效的,這意味著指標 p 指向 &a[1]。 >>>More
for (int i=0;i<4;i++)x*=*(p+1);
等效。 for (int i=0;i<4;i++)x=x*a[i]; >>>More
………童鞋:你搞砸了你的指標。
首先,填充功能確實設定了您分配給它的所有空間'\0',但指標 p 不再指向您分配的空間,而是指向記憶體中“堆”的頂部; 然後,func 2 再次將其向上移動,按 num 位和位元組移動它,此時它指向 **? 反正不是你想要的地方。 將它指向的記憶體設定為'\0',則 strlen 應該得到 0,後面跟著 blank 將沒有任何輸出。 >>>More