程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言 指向另一指針地址的指針

C語言 指向另一指針地址的指針

編輯:關於C語言
 

回顧指針概念:
1. 程序如下聲明變量
short int i;
char a;
short int *p;

2. 程序在內存某地址空間上為各變量開辟空間,如下所示:
指向另一指針的指針 - wj86843248 - 別摸我
 
從圖中可以看出
i變量在內存中的起始地址是5,占2個字節,即:5、6。
a變量在內存中的起始地址是7,占1個字節,即:7。
p變量在內存中的起始地址是11,占4個字節,即:11、12、13、14。

3. 賦值如下:
i = 50;
p = &i;
變量的內存如下:

          指向另一指針的指針 - wj86843248 - 別摸我

指向另一指針地址的指針:
1. 指針變量本身與其它變量一樣也是在某個內存地址中的,如p的內存起始地址是11。
short int **pp;
*pp = &p;
(1) 第一句:聲明一個指針變量pp,這個pp用來指向一個short int *類型指針變量的地址。
(2) 第二句:把p的地址賦給pp,即將地址值11賦值給pp。

從下圖可以看出,指針變量pp的內容就是指針變量p的起始地址。
指向另一指針的指針 - wj86843248 - 別摸我
 
一個應用例子:
(1) 設計一個函數:void find1(char array[], char search, char *p);
(2) 要求:這個函數參數中的數組array是以0值為結束的字符串,要求在字符串array中查找字符是參數search裡的
字符。如果找到,函數通過第三個參數返回值為array字符串中第一個找到的字符的地址。如果沒找到,則返回0。

原文:徹底搞定C指針-姚雲飛

測試環境vc6.0
********************************************************************/

#include <stdio.h>

void find1(char array[], char search, char *p);
void find2(char array[], char search, char **pp);

int main(void)
{
char str[] = "afsdfsdfd\0";
char a = 'd';
char *pa = NULL;

//find1(str, a, pa);
find2(str, a, &pa);

if ( pa == 0)
{
printf("沒找到!\n");
}
else
{
printf("找到了,pa = %#x\n", pa);
}

return 0;
}

void find1(char array[], char search, char *p)
{
int i;

for (i = 0; *(array + i) != 0; i++)
{
if (*(array + i) == search)
{
p = array + i;
break;
}
else if (*(array + i) == 0)
{
p = 0;
break;
}
}
}

void find2(char array[], char search, char **pp)
{
int i;

for (i = 0; *(array + i) != 0; i++)
{
if (*(array + i) == search)
{
*pp = array + i;
break;
}
else if (*(array + i) == 0)
{
*pp = 0;
break;
}
}
}


/********************************************************************
函數定義處:void find1(char array[], char search, char *p)
函數調用處:find1(str, a, pa)
對形參p的修改並不會改變實參pa的值,因此pa的值沒有改變,還是初始化時的0。

找到了,pa = 0x12ff77
注意:printf("%#x",pa); #是使輸出數據前面帶0x,x是以十六進制方式輸出。
********************************************************************/

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved