❶ 求有關指針數組和多重指針的c語言程序的簡單例子
#include<stdio.h>
int main()
{ char *a[3]={"abc","ewd","sss"};//a是指針數組,每個元素存放後面對應字元串的起始地址
int i;
for(i=0;i<3;i++)
puts(a[i]); //輸出地址a[i]指向的字元串
return 0;
}
❷ 如何理解指針,多重指針,結構體指針
如果一個指針變數存放的是某個對象的地址,則稱這個指針變數指向該對象。在C++程序設計中,指針變數只有確定了指向才有意義。
1. 定義指針變數的一般形式如下:
類型名*指針變數名1,*指針變數名2,... *指針變數名n ;
2. 空指針
空指針是一個特殊的指針,它的值是0,C語言中用符號常量NULL(在stdio.h中定義)表示這個空值,並保證這個值不會是任何變數的地址。空指針對任何指針類型賦值都是合法的。一個指針變數具有空指針值表示當前它沒有指向任何有意義的東西。
3. void指針
(void *)類型的指針叫通用指針,可以指向任何的變數,C語言允許直接把任何變數的地址作為指針賦給通用指針。但是有一點需要注意void*不能指向由const修飾的變數,eg const int test; void * ptv; ptv = &test;第三句是非法的,只有將ptv申明為const void * ptv;上述第三句(ptv = &test),才是合法的.
當需要使用通用指針所指的數據參加運算時,需要寫出類型強制轉換。如通用指針ptv 所指空間的數據是整型數據,p是整型指針,用此式轉換:p=(int *)ptv 。
❸ C語言多重指針怎樣理解和賦值
#include<malloc.h>
#include<stdio.h>
#include<stdlib.h>
intmain()
{
char**p,i;
p=(char**)malloc(sizeof(char*)*50);
for(i=0;i<50;i++)
p[i]=(char*)malloc(sizeof(char)*50);
for(i=0;i<50;i++)
sprintf(p[i],"Thisisstring%d.",i);
for(i=0;i<50;i++)
{
printf("%s ",p[i]);
getch();
}
return0;
}
可以看出這里 p 是一個二維數組。
這就是二維數組的原理。
❹ C語言結構體多重指針的問題(裡面為什麼可以運行,但有幾句話警告了)
結構體類型
typedef struct
{
int data;
struct LinkNode *next;
}LinkNode;
的定義有問題。
將其改成這樣定義:
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}LinkNode;
❺ c語言,多重指針。例如int **p,intq,如果p=q,那麼p=&q對嗎
int **p; p是二級指針。
int q; q是整型變數。
那麼 p=q; 本身就是不對的。
p=&q一樣不對。
都是類型不匹配。 p二級指針, &q一級指針。 q整型變數。 這三個類型都不一樣。
正確做法是
int **p, *p1, q;
p1=&q;
p=&p1;
這樣類型才是對的。
❻ 急急急!!!關於c語言的多重指針及函數調用問題!!!
#include<stdio.h>
void main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p1 = a;
int **p2 = &p1;
int ***p3 = &p2;
printf("第一個數的4倍數:%d ",*p1*4);
printf("第三個數的8倍數:%d ",*(*p2+2)*8);
printf("第六個數的2倍數:%d ",*(**p3+5)*2);
for(int i = 0;i<10;i++)
printf("第%d個數的10倍數:%d ",i+1,*(*p2+i)*10);
}
❼ c語言中指針和引用的區別,以及指針的多重調用
指針,全稱為指針變數,是用來存儲內存地址的一種變數。程序中,一般通過指針來訪問其指向的內存地址中的內容(數據)。
引用,是C++中提出來的一種新的使用變數的方式,即,給實際變數起個別名,通過這個別名來引用實際的變數。標准C中不支持變數的引用。
這兩個概念沒有任何相關性。
指針是實實在在的變數,有自己的內存存儲空間,它可以指向任何有效的變數。
引用是一種形式、方法,定義的引用變數,實際上是原實際變數的另一個名稱(別名),引用變數本身沒有自己的實際存儲空間,操作引用變數,就是在操作實際變數。
❽ C語言中建立動態鏈表要用雙重指針嗎那個雙重指針有什麼作用
舉個例吧,
假如一個結構:LinkNode
初始化:Initial(LinkNode **p);//這里就是雙指針
那麼在調用就這樣,
LinkNode *p;
Initial(&p);
原理就是,如果你要通過函數來改變某個參數的值,那麼就要傳該參數的地址進去。
這里p是一個指針,所以要傳指針的地址進去,也就是一個指向指針的指針;
初始化函數Initial(LinkNode *(*p));(*p)是指針,*(*p)就是傳指針的地址進去了,意思就這樣,不知道你聽不聽得懂。
不管動態還是靜態,只要是要通過函數來改變指針類型數據的值,就要用雙重指針。
❾ 關於C語言中,多重指針的問題。
int *p 定義了一個名叫p的指針它可以存儲一個int型空間地址
好吧 那麼這個p是不是也在內存上存在著? 是不是也會有自己的地址?
那麼是不是也可能有一個指針保存著這個p的地址?
那麼這個存儲指針的地址的指針如何定義呢?
int **s 這也是一個指針 但是它能存儲一個指針的地址(而不是一個普通的變數)
所以我們可以 這么做了
s=&p
那麼s是不是也有地址?....
下面繼續往下推吧 就都是一個意思了...