[英]pointers & pointer to pointer in C
嘿,我正在嘗試理解指針,但我注意到在我的程序中導致未定義行為的東西在第一種情況下,當我將指向 q1 的指針衰減到 NULL 時,一切都很好,但是當我將指針 *q1 衰減到 NULL 時,終端沒有顯示任何內容。 出了什么問題?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main ()
{
char *p[11]={"vasilis","loukas","vasilis","vasilis","giorgos","makis","vasilis","nikos","makis","nikos"};
char **p1;
char**d1;
char**q1;
q1=NULL;
p1=&p[0];
d1=&p[1];
/******Count words*********/
int count=0;
for(p1=&p[0] ; *p1 ; p1++)
{
count++;
}
printf("\nthe number of words : %d" ,count);
return 0;
}
第二種情況:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main ()
{
char *p[11]={"vasilis","loukas","vasilis","vasilis","giorgos","makis","vasilis","nikos","makis","nikos"};
char **p1;
char**d1;
char**q1;
*q1=NULL;
p1=&p[0];
d1=&p[1];
/******Count words*********/
int count=0;
for(p1=&p[0] ; *p1 ; p1++)
{
count++;
}
printf("\nthe number of words : %d" ,count);
return 0;
}
在您的第一個代碼中, q1 = NULL;
line 正在為指針q1
分配一個零(null)值,這是一個完全有效的操作(即使該指針可能指向另一個指針)。 實際上,將NULL
值分配給指針是一種常用技術,用於測試該指針當前是否包含有效地址(如果它是NULL
,那么我們不能使用它)。
在您的第二個代碼中, *q1 = NULL;
,您正在嘗試將零分配給q1
指向的 object (本身就是一個指針); 但是, q1
尚未分配值(地址),因此它不指向任何有效目標,並且您的嘗試失敗(因為您正在嘗試修改 memory 的“隨機”部分,您可能不會可使用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.