第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用函數(shù)更改指針包含的地址

使用函數(shù)更改指針包含的地址

C
胡說(shuō)叔叔 2019-07-03 10:11:00
使用函數(shù)更改指針包含的地址如果我聲明了一個(gè)指針p如int *p;在主模塊中,我可以更改p通過(guò)分配p=&a;哪里a是另一個(gè)已聲明的整數(shù)變量。我現(xiàn)在想通過(guò)使用如下函數(shù)來(lái)更改地址:void change_adrs(int*q){     int *newad;     q=newad;}如果我從主模塊調(diào)用這個(gè)函數(shù)int main(){     int *p;     int a=0;     p=&a; // this changes the address contained by pointer p     printf("\n The address is %u ",p);     change_adrs(p);     printf("\n the address is %u ",p); // but this doesn't change the address     return 0;}地址內(nèi)容不變。在相同的任務(wù)中使用函數(shù)有什么問(wèn)題?
查看完整描述

3 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

在C中,函數(shù)參數(shù)是通過(guò)值傳遞的。因此,將對(duì)參數(shù)進(jìn)行復(fù)制,并對(duì)該副本進(jìn)行更改,而不是希望看到修改的實(shí)際指針。您將需要更改您的函數(shù)以接受雙指針參數(shù),如果要這樣做,則對(duì)取消引用的參數(shù)進(jìn)行更改。例如

 void foo(int** p) {
      *p = 0;  /* set pointer to null */
 }
 void foo2(int* p) {
      p = 0;  /* makes copy of p and copy is set to null*/
 }

 int main() {
     int* k;
     foo2(k);   /* k unchanged */
     foo(&k);   /* NOW k == 0 */
 }

如果您可以使用C+,另一種方法是更改函數(shù)以接受對(duì)指針的引用。


查看完整回答
反對(duì) 回復(fù) 2019-07-03
?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

在C中,變量通過(guò)值傳遞-指針的副本傳遞給函數(shù)。使用指向指針的另一個(gè)指針:

void change(int **p, int *someOtherAddress){
    *p = someOtherAddress;}int a = 1, b = 2;int *p = &a;printf("*p = %d\n", *p);change(&p, &b);printf("*p = %d\n", *p);

這個(gè)指紋

*p = 1
*p = 2


查看完整回答
反對(duì) 回復(fù) 2019-07-03
?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果您想在C中修改函數(shù)中變量的內(nèi)容,指針也是一個(gè)變量,您必須傳遞它。指針間接參考總是用&地址和*去引用操作符。我是說(shuō)*在更改變量的值時(shí),始終使用運(yùn)算符并將其放在前面。

#include <stdio.h>#include <stdlib.h>void changeIntVal(int *x) {
    *x = 5;}void changePointerAddr(int **q) {
    int *newad;
    *q = newad;}void changePPAddr(int ***q) {
    int **dummy;
    *q = dummy;}int main() {
    int *p;
    int **pp;
    int *tempForPP;
    int a = 0;
    printf("\n The address pointing by p -> %p, pp -> %p, value of a -> %d ", p, pp, a);


    p = &a;
    pp = &tempForPP;
    printf("\n The address pointing by p -> %p, pp -> %p, value of a -> %d ", p, pp, a);

    changeIntVal(&a);        // ----
                             //    |---
    changePointerAddr(&p);   // ----  |---->  parts of what I mean
                             //    |---
    changePPAddr(&pp);       // ----

    printf("\n The address pointing by p -> %p, pp -> %p, value of a -> %d ", p, pp, a);

    return 0;}


查看完整回答
反對(duì) 回復(fù) 2019-07-03
  • 3 回答
  • 0 關(guān)注
  • 616 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)